16,814
社区成员




这个问题 调用 如下代码 就解决了
ui->tableWidget->update();
ui->tableWidget->viewport()->update();
qApp->processEvents();
// 定义线程
class Mythread : public QThread {
Q_OBJECT
public :
void run();
signals:
void testData(double);
};
// 启动函数
void MyThread::run() {
while (1) {
double a=getdata();
emit testData(a);
}
}
// 线程处理完毕
// 你的mainwindow处理
// mainwindow.h
//添加Mythread成员变量
private:
MyThread *myThread;
// 添加管理槽函数
private slots:
void testData(double a);
// mainwindow.cpp
myThread = new MyThread(this);
connect(myThread, SIGNAL(testData(double)), this, SLOT(testData(double)));
myThread->start();
void MainWindow::testData(double a) {
ui_show->setData(a);
// 直接向表格添加数据也行
QTableWidgetItem *item = new QTableWidgetItem();
item->setText(QString("data = %1").arg(a));
ui->tableWidget->setItem(item);
}
想了想,可能不是这个问题。原因应该在于,setitem,只是设置了model里面的值,真正要到view update的时候才会更新;如果你的循环很占cpu的话,很短时间的两次setitem,是不会有view update消息处理的。所以看起来就是没有刷新。 不建议这么暴力地直接循环read,做成触发式的有响应时emit signal
不建议这么暴力地直接循环read,做成触发式的有响应时emit signal