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;
}
}
如何發佈一些代碼? – 2012-07-05 11:25:02
@AndrejsCainikovs我編輯了問題並粘貼了我創建表的函數的代碼。 – Mcolorz 2012-07-05 11:37:48
前五十個值正在打印,但接下來的50個值不是。 當我添加__cout <<「(* it).first << endl; __裏面如果然後下一個五十個值也顯示,但不刷新表 – Mcolorz 2012-07-05 11:38:45