QT中,我将一张数据库table表显示在tableView上,我需要去设置或修改tableView上每一行的颜色,该怎么做?

您所在的位置: &
Qt数据库 QSqlTableModel实例操作(1)
Qt数据库 QSqlTableModel实例操作(1)
本文介绍的是Qt数据库 QSqlTableModel实例操作,详细操作请先来看内容。与上篇内容衔接着,不顾本文也有关于上篇内容的链接。
Qt数据库 QSqlTableModel实例操作是本文所介绍的内容,我们先来看内容。在上一篇我们讲到只读的QSqlQueryModel也可以使其可编辑,但是很麻烦。Qt提供了操作单表的QSqlTableModel,如果我们需要对表的内容进行修改,那么我们就可以直接使用这个类。
相关联文章:
QSqlTableModel,该类提供了一个可读写单张SQL表的可编辑数据模型。我们下面就对其的几个常用功能进行介绍,分别是修改,插入,删除,查询,和排序。
在开始讲之前,我们还是新建Qt4 Gui Application工程,我这里工程名为tableModel ,然后选中QtSql模块,Base class选QWidget。工程建好后,添加C++ Header File ,命名为database.h,更改其内容如下:
#ifndef&DATABASE_H &#define&DATABASE_H &&#include&&#include&&#include&&static&bool&createConnection() &{ &&&&&QSqlDatabase&db&=&QSqlDatabase::addDatabase(&QSQLITE&); &&&&&db.setDatabaseName(&database.db&); &&&&&if(!db.open())&return& &&&&&QSqlQuery& &&&&&query.exec(QObject::tr(&create&table&student&(id&int&primary&key,&name&vchar)&)); &&&&&query.exec(QObject::tr(&insert&into&student&values&(0,&刘明&)&)); &&&&&query.exec(QObject::tr(&insert&into&student&values&(1,&陈刚&)&)); &&&&&query.exec(QObject::tr(&insert&into&student&values&(2,&王红&)&)); &&&&&return& &} &#endif&//&DATABASE_H&
为了在数据库中能使用中文,我们使用了QObject类的tr()函数。而在下面的main()函数中我们也需要添加相应的代码来支持中文。
然后将main.cpp的文件更改如下:
#include&/QApplication&#include&&widget.h& &#include&&database.h& &#include&&int&main(int&argc,&char&*argv[]) &{ &&&&&QApplication&a(argc,&argv); &&&&&QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); &&&&&if(!createConnection()) &&&&&&&&&return&1; &&&&&Widget&w; &&&&&w.show(); &&&&&return&a.exec(); &}&
下面我们打开widget.ui,设计界面如下:
其中的部件有Table View 和 Line Edit,其余是几个按钮部件。
然后在widget.h中加入头文件: #include &QSqlTableModel&
在private中声明对象:QSqlTableModel *
因为我们要在不同的函数中使用model对象,所以我们在这里声明它。
我们到widget.cpp文件中的构造函数里添加如下代码:
model&=&new&QSqlTableModel(this); &model-setTable(&student&); &model-setEditStrategy(QSqlTableModel::OnManualSubmit); &model-select();&//选取整个表的所有行 &//&model-removeColumn(1);&//不显示name属性列,如果这时添加记录,则该属性的值添加不上 &ui-tableView-setModel(model); &//&ui-tableView-setEditTriggers(QAbstractItemView::NoEditTriggers);&&&//使其不可编辑&
此时运行程序,效果如下:
可以看到,这个模型已经完全脱离了SQL语句,我们只需要执行select()函数就能查询整张表。上面有两行代码被注释掉了,你可以取消注释,测试一下它们的作用。
第一,修改操作。
1.我们进入&提交修改&按钮的单击事件槽函数,修改如下:
void&Widget::on_pushButton_clicked()&//提交修改 &{ &&&&&model-database().transaction();&//开始事务操作 &&&&&if&(model-submitAll())&{ &&&&&&&&&model-database().commit();&//提交 &&&&&}&else&{ &&&&&&&&&model-database().rollback();&//回滚 &&&&&&&&&QMessageBox::warning(this,&tr(&tableModel&), &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&tr(&数据库错误:&%1&P) &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.arg(model-lastError().text())); &&&&&} &}&
这里用到了事务操作,真正起提交操作的是model-&submitAll()一句,它提交所有更改。
内容导航&第 1 页: &第 2 页: &第 3 页:
关于&&&&的更多文章
移动异构计算是相对于同构计算来说的,同构计算就是使用同一个处
既然强大的Android Studio来了,有什么理由不去用呢?
PC互联网巨头百度、腾讯和阿里,通过在移动互联网投资
谷歌在新品发布会上正式发布了传闻已久的Android 4.3
App定价是开发者不可忽视的部分,它是确保应用高能见
本书面向企业网络应用需求,详细介绍了Windows网络互联解决方案、中小企业共享上网解决方案、基于ISA Server 2006的代理服务器与
Windows Phone专家
Android开发专家
51CTO旗下网站怎么用Qt的TableView来显示数据,数据有些来自MySQL的表中(多张不同的表),并且有些数据并不是从MySQL取_百度知道
怎么用Qt的TableView来显示数据,数据有些来自MySQL的表中(多张不同的表),并且有些数据并不是从MySQL取
需要做一个程序用Qt的TableView来显示数据,我在网上可以查到的资料Qt的table都是针对单表操作的,而是通过程序计算得到,并且有些数据并不是从MySQL取的,数据有些来自MySQL的表中(多张不同的表)
提问者采纳
addItem(QO网页浏览&..../QVBoxLayout *leftLayout = new QVBoxLshow();pWidget-&addLayout(stackedLayout)::tr(&setLayout(manLayout);listWidget-&左边的列表控件QListWidget *listWidget = new QListWidget(pWidget),具体实现代码如下.
&#47.;stackedLayout-&右边的分页控件QWidget *page1 = new QWidget(pWidget);QWidget *page2 = new QWidget(pWidget);)), SLOT(setCurrentIndex(int)));通过调用QW外观设置&&listWidget-&gt,将layout布局管理器类添加到窗口部件对象pWidget中manLayout-&
:列表与分组布局QObject,stackedLlistWidget-&pWidget-&/addItem(QObject, SIGNAL(currentRowChanged(int)),望采纳;&addWidget(page1);右边分页布局(两页窗口)QStackedLayout *stackedLayout = new QStackedLayout:&#47:connect(listWmanLayout-&stackedLayout-&));//setCurrentRow(0);关联;/&addWidget(listWidget);/leftLayout-&…page1上增加控件&//创建QWidget类的一个对象pWidgetQWidget *pWidget = new QW&#47:.;/addLayout(leftLayout):setLayout()函数;&#47:tr(&quot:可以采用Stacked Layouts分页布局:;/…page2上增加控件&设置布局管理&addWidget(page2);创建一个布局管理器类 layoutQHBoxLayout *manLayout = new QHBoxLayout
这个方法不就是把内容一个一个加上去么?除了这个以外还有其他的方法么,Qt没有类似C#的表格操作方法么?
据我所知qt对于表格的操作,就只有这几种方法了一、使用ActiveQt模块读取二、先用其它工具将.xls文件转换成XML格式的文件,然后读取三、使用其它第三方开发包读取。
提问者评价
嗯,Qt操作表格果然还是有点痛苦,不过总算是有方向了,谢谢O(∩_∩)O
其他类似问题
为您推荐:
mysql的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁16770人阅读
一、添加表头:
*model = new QStandardItemModel();
二、设置表格属性:
表头信息显示居左
设置列宽不可变
ui-&tableView-&setModel(model);”在前,属性具体设置在后,
三、添加行(添加三行一样的信息):
for(int i = 0; i & 3; i++)
model-&setItem(i,0,new QStandardItem(&&));
&//设置字符颜色
model-&item(i,0)-&setForeground(QBrush(QColor(255, 0, 0)));
&//设置字符位置
model-&item(i,0)-&setTextAlignment(Qt::AlignCenter);
model-&setItem(i,1,new QStandardItem(QString::fromLocal8Bit(&哈哈&)));
四、删除行:
是指定删除哪一行
删除所有行
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:70895次
排名:千里之外
原创:25篇
转载:12篇
评论:15条
(2)(1)(2)(1)(1)(3)(2)(1)(1)(6)(1)(1)(3)(5)(1)(6)大家好,有个问题想请教,
我用tableview&显示数据库中的数据,我数据库中有一个时间字段,我用sql语句可以查询到两个时间的数据,当我无法显示到tableview&中,
我用的model&&是&QSqlTableModel&*
求高手指点一下!
回复讨论(解决方案)
代码怎么写的
代码怎么写的
.h&&&&&QSqlTableModel&*
&&&&QSqlDatabase&
MainWindow::MainWindow(QWidget&*parent)&:
&&&&QMainWindow(parent),
&&&&ui(new&Ui::MainWindow)
&&&&ui-&setupUi(this);
&&&&ui-&progressBar-&setValue(0);
&&&&createConnection();
&&&&model&=&new&QSqlTableModel(this);
&&&&model-&setTable(&Data&);
&&&&model-&setEditStrategy(QSqlTableModel::OnManualSubmit);
&&&&//&&&model-&setSort(0,&Qt::AscendingOrder);&//id属性,即第0列,升序排列
&&&&int&a=model-&select();&//选取整个表的所有行
&&&&qDebug()&&&a&&&a;
&&&&//&&&&while(model-&canFetchMore())
&&&&//&&&&{
&&&&//&&&&&&&&model-&fetchMore();
&&&&//&&&&&&&&model-&rowCount();
&&&&//&&&&&&&&int ico=model-&rowCount();
&&&&//&&&&&&&&qDebug()&&&ico&&&
&&&&//&&&&}
&&&&int ico=model-&rowCount();
&&&&qDebug()&&&ico&&&
&&&&ui-&tableView-&setModel(model);
&&&&ui-&tableView-&setEditTriggers(QAbstractItemView::NoEditTriggers);
void&MainWindow::on_pushButton_2_clicked()&&//数据库按时间查询
&&&&QSqlQuery&query(db);//
&&&&query.exec(&select&*from&Data&);
&&&&query.seek(0);
&&&&int&j=0;
&&&&while&(query.next())
&&&&&&&&j++;
&&&&qDebug()&&&&j::&&&j;
&&&&qDebug()&&&query.lastError();
&&&&query.exec(&&select&*from&Data&where&Time&between&&format('&14:53:57',&'yyyy-mm-dd&hh:mm:ss')&and&format('&14:53:58',&'yyyy-mm-dd&hh:mm:ss')&&);
&&&&qDebug()&&&query.lastError();
&&&&query.seek(0);
&&&&int&i=0;
&&&&while&(query.next())
&&&&&&&&i++;
&&&&qDebug()&&&&i::&&&i;
&&&&qDebug()&&&query.lastError();
&&&&model-&setTable(&Data&);
&&&&model-&select();
&&&&model-&submitAll();
&&&&ui-&tableView-&setModel(model);
&&&&ui-&tableView-&show();
解决了&,用的是&setfilter

我要回帖

更多关于 java table显示数据库 的文章

 

随机推荐