2012-07-05 41 views
1

我有一个QTableView小部件,它装满了QStandardItemModel的帮助。 在每两秒钟内使用QTimer调用包含这两个类的函数,并给出接下来的50个条目。更新QTableView所显示的视图

该函数每隔两秒钟后都会正常运行,但不会在显示的窗口中刷新值。
在此先感谢您的帮助。

代码:

void Box::create_frame() 
{ 
     k=0; 
     tablegroup = new QGroupBox(tr("Table")); 
     QVBoxLayout *layout = new QVBoxLayout; 

     table = new QTableView(this); 
     table->setUpdatesEnabled(false); 

     cout << "recent check" <<endl; 
     QStandardItemModel *mode = new QStandardItemModel(1,2,this); 
     mode->setHorizontalHeaderItem(0, new QStandardItem(QString("ID"))); 
     mode->setHorizontalHeaderItem(1, new QStandardItem(QString("DATA"))); 

     map<int,QString>::iterator it; 

     for(it=dataa.begin();it!=dataa.end();it++) 
     { 
       for(int i=0;i<=1;i++) 
       { 
         QStandardItem *item; 
         item = new QStandardItem(); 
         item->setEditable(true); 
         if(i==0) 
         { 
           item->setData(((*it).first), Qt::DisplayRole); 
           mode->setItem(k,i,item); 
         } 
         else 
         { 
           item->setData(((*it).second), Qt::DisplayRole); 
           mode->setItem(k,i,item); 
         } 
       } 
     k++; 
     } 
     //setUpdatesEnabled(false); 
     table->setUpdatesEnabled(true); 
     cout << "create frame check" << endl; 
     table->setModel(mode); 
     layout->addWidget(table); 
     tablegroup->setLayout(layout); 
} 

QTimer *timer = new QTimer(this); 
     connect(timer, SIGNAL(timeout()), this, SLOT(refresh())); 
     timer->start(2000); 
} 

void dataThread::run() 
{ 
     boost::posix_time::seconds delay(2); 

     int g=0; 
     int h=50; 

     while(1) 
     { 
       while(g<h) 
       { 
         dataa.insert(pair<int,QString>(g+1,"HELLO")); 
         g++; 
       } 
       boost::this_thread::sleep(delay); 
       h=h+50; 
     } 

} 
+0

如何发布一些代码? – 2012-07-05 11:25:02

+0

@AndrejsCainikovs我编辑了问题并粘贴了我创建表的函数的代码。 – Mcolorz 2012-07-05 11:37:48

+0

前五十个值正在打印,但接下来的50个值不是。 当我添加__cout <<“(* it).first << endl; __里面如果然后下一个五十个值也显示,但不刷新表 – Mcolorz 2012-07-05 11:38:45

回答

0

首先,它是已故这里,所以也许我忽视的东西,但是从运行的循环,它看起来并不像你实际上添加任何数据到表的模型,而你”只需将条目添加到您的dataa矢量/列表中即可。

也许你应该添加到您的运行循环

while(g < h) 
{ 
    dataa.insert(pair<int,QString>(g+1,"HELLO")); 

    QStandardItem *item; 
    item = new QStandardItem(); 
    item->setEditable(true); 
    item->setData(g+1, Qt::DisplayRole); 

    // You need the model here 
    table->model()->setItem(h + g, 0, item); 

    item = new QStandardItem(); 
    item->setData("Hello", Qt::DisplayRole); 

    // You need the model again here 
    table->model->setItem(h + g, 1, item); 

    ++g; 
} 

再次较晚,但我认为你的想法。您目前不会更改表格设置的模型,而只是更改您的向量/列表。

相关问题