有一个线程正在运行!它每秒两次从互联网接收数据,然后我将数据设置为qtablewidget
?
如何进行QTableWidget
更新?
现在我必须点击界面,如果我想更新显示!
DWORD WINAPI MyThreadProc1(LPVOID lpParameter){
int data=receive();
w.setVal(data);
return 0;
}
void TradeSystem::setValue(int num){
QTableWidgetItem *item = new QTableWidgetItem(QString::number(num,10,1));
item->setBackgroundColor(QColor(0,60,10));
ui.tableWidget_3->item(0,0)->setText(QString::number(num,10,0));
}
答案 0 :(得分:1)
我想这个问题属于类别'我想从另一个线程改变gui' - >不要这样做。
当setValue(int)
是广告位时,您可以执行以下操作:
DWORD WINAPI MyThreadProc1(LPVOID lpParameter)
{
(void)lpParameter;
int data = receive();
QMetaObject::invokeMethod(w, "setValue", Q_ARG(int, data));
}
答案 1 :(得分:0)
你应该习惯QT中的信号,它易于使用,可以让你的生活更轻松。
DWORD WINAPI MyThreadProc1(LPVOID lpParameter){
int data=receive();
emit data_recieved(data);
return 0;
}
void TradeSystem::setValue(int num){
QTableWidgetItem *item = new QTableWidgetItem(QString::number(num,10,1));
item->setBackgroundColor(QColor(0,60,10));
ui.tableWidget_3->item(0,0)->setText(QString::number(num,10,0));
}
在激活MyThreadProc1之前,连接信号和处理程序:
connect(this,SLOT(setValue(int)),MyThreadProc1,SIGNAL(data_recieved(int)));
通过这种方式,您可以将qt中的每个小部件与信号/插槽基本连接
要么采用不同的形式,要么是螺纹
这也很有用Docs。