现在我用到了一个QSqlTableModel和一个QTableView,QSqlTableModel的一个对象连接到了一个SQlite的数据库。
刚开始的时候将数据库中的项目都输出到view上,但是过一段时间(我这里弄了一个信号和槽),数据库中的内容改变了,现在如何更新这个VIEW使之和当前数据库的内容一致。
但是我第二次重新显示VIEW的时候除了列名,其它什么都没有。麻烦大哥大姐指条路,不胜感激!!!
代码如下:
#include <QtGui>
#include <QtSql>
#include<QTimer>
#include "serverView.h"
MyServerView:: MyServerView()
{
QTimer *mytime=new QTimer;
mytime->start(5000);
model = new QSqlTableModel(this);
model->setTable("TheUser");
model->setSort(1, Qt::AscendingOrder);
model->select();//用表中的数据来填充model,事实上到这里数据库中的数据都已经导入到model了,可以直接在view上显示,下面的主要对view的显示进行设置
view = new QTableView;
view->setModel(model); //为视图选择模型
view->setSelectionMode(QAbstractItemView::SingleSelection); //单选,每次只能选中一个单位
view->setSelectionBehavior(QAbstractItemView::SelectRows); //每个选择单位设置为一行
view->setColumnHidden(0, true); //隐藏原来的ID号,即原来的顺序
view->resizeColumnsToContents(); //重新调整每一列的大小,使得每一列都能在视图中显示出来
view->setEditTriggers(QAbstractItemView::NoEditTriggers); //这里设置视图为不可编辑
QHeaderView *header = view->horizontalHeader();
header->setStretchLastSection(true);
mainLayout = new QHBoxLayout;
mainLayout->addWidget(view);
setLayout(mainLayout);
setWindowTitle(tr("server"));
connect(mytime,SIGNAL(timeout()),this,SLOT(changeview()));
}
void MyServerView::changeview()
{
model->setFilter("username=='左成'");
model->select();
if(model->rowCount()==1)
{
model->removeRows(0,1);
model->submitAll();
}
view->setModel(model);
view->setSelectionMode(QAbstractItemView::SingleSelection); //单选,每次只能选中一个单位
view->setSelectionBehavior(QAbstractItemView::SelectRows); //每个选择单位设置为一行
view->setColumnHidden(0, true); //隐藏原来的ID号,即原来的顺序
view->resizeColumnsToContents(); //重新调整每一列的大小,使得每一列都能在视图中显示出来
view->setEditTriggers(QAbstractItemView::NoEditTriggers); //这里设置视图为不可编辑
mainLayout->addWidget(view);
setLayout(mainLayout);
this->show();
}