2012-07-05 73 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; 
} 

再次較晚,但我認爲你的想法。您目前不會更改表格設置的模型,而只是更改您的向量/列表。