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