我有一个QTableView
小部件,其中填充了QStandardItemModel
的帮助。
每两秒钟,使用QTimer
调用包含这两个类的函数,然后给出接下来的50个条目。
每两秒钟后该功能正常运行,但在显示的窗口中没有刷新这些值 提前感谢您的帮助。
代码:
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 :(得分:0)
首先,它已经很晚了,所以也许我忽略了一些东西,但是从你的运行循环开始,看起来你实际上并没有将任何数据添加到你的表模型中,而只是你只是在你的{{1}中添加条目} vector / list。
也许您应该将此添加到您的运行循环
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;
}
向量/列表。