如何更新QTableWidget项目?

时间:2015-03-20 07:57:10

标签: qt visual-c++ qt4

有一个线程正在运行!它每秒两次从互联网接收数据,然后我将数据设置为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));
}

2 个答案:

答案 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