• 8234阅读
  • 1回复

[提问]model改变如何去改变view [复制链接]

上一主题 下一主题
离线lysddp
 

只看楼主 正序阅读 楼主  发表于: 2010-12-28
— 本帖被 yfx2003 从 《C++ GUI Qt 4编程》(第2版)专栏 移动到本区(2011-05-16) —
现在我用到了一个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();
 }

离线dhiker

只看该作者 1楼 发表于: 2016-01-06
快速回复
限100 字节
 
上一个 下一个