关于QT界面tablewidget刷新问题

lololodota 2015-03-19 10:42:11
现在这里有一个类,不断的读取数据,显示在QT的tableWidget上面,ui_show为界面类
while(read){
double a=getdata();
ui_show->set(a);
}

这里发现数据确实是更新了,但是界面没有实时更新,我必须要拖动一下界面才能更新,问怎么解决?
...全文
3735 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiejieaiai 2021-06-13
  • 打赏
  • 举报
回复

这个问题 调用 如下代码 就解决了

ui->tableWidget->update();
ui->tableWidget->viewport()->update();
qApp->processEvents();

 

yyxmm 2015-03-27
  • 打赏
  • 举报
回复
一直在读,都没进入到事件循环中,简单点就用定时器
yjzl1911 2015-03-20
  • 打赏
  • 举报
回复
界面更新要 调用 Widget::update 来刷新吧?
lynnhua_ 2015-03-20
  • 打赏
  • 举报
回复

// 定义线程
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);
}
lynnhua_ 2015-03-20
  • 打赏
  • 举报
回复
引用 11 楼 lololodota 的回复:
[quote=引用 8 楼 nigoole 的回复:] 启动线程来处理吧,所有刷新数据有线程处理,界面就可以实时刷新,且不会卡。
现在启动了线程来处理,还是不会刷新!还有其他的办法吗?你有遇到过类似的问题吗?[/quote] 贴下你线程处理的代码呢?
lololodota 2015-03-20
  • 打赏
  • 举报
回复
引用 8 楼 nigoole 的回复:
启动线程来处理吧,所有刷新数据有线程处理,界面就可以实时刷新,且不会卡。
现在启动了线程来处理,还是不会刷新!还有其他的办法吗?你有遇到过类似的问题吗?
lololodota 2015-03-20
  • 打赏
  • 举报
回复
引用 9 楼 yjzl1911 的回复:
界面更新要 调用 Widget::update 来刷新吧?
不是的,在每次写入的完成之后都有调用update,但是界面还是不会刷新,只有我点击界面的时候才会刷新!!!
lololodota 2015-03-19
  • 打赏
  • 举报
回复
引用 3 楼 cuzn1024 的回复:
想了想,可能不是这个问题。原因应该在于,setitem,只是设置了model里面的值,真正要到view update的时候才会更新;如果你的循环很占cpu的话,很短时间的两次setitem,是不会有view update消息处理的。所以看起来就是没有刷新。
引用 2 楼 cuzn1024 的回复:
不建议这么暴力地直接循环read,做成触发式的有响应时emit signal
其实我也没有很快的一直读,每秒钟读10次左右吧
lololodota 2015-03-19
  • 打赏
  • 举报
回复
引用 3 楼 cuzn1024 的回复:
想了想,可能不是这个问题。原因应该在于,setitem,只是设置了model里面的值,真正要到view update的时候才会更新;如果你的循环很占cpu的话,很短时间的两次setitem,是不会有view update消息处理的。所以看起来就是没有刷新。
引用 2 楼 cuzn1024 的回复:
不建议这么暴力地直接循环read,做成触发式的有响应时emit signal
那想问一下,一般怎么解决这个问题呢?
  • 打赏
  • 举报
回复
想了想,可能不是这个问题。原因应该在于,setitem,只是设置了model里面的值,真正要到view update的时候才会更新;如果你的循环很占cpu的话,很短时间的两次setitem,是不会有view update消息处理的。所以看起来就是没有刷新。
引用 2 楼 cuzn1024 的回复:
不建议这么暴力地直接循环read,做成触发式的有响应时emit signal
  • 打赏
  • 举报
回复
不建议这么暴力地直接循环read,做成触发式的有响应时emit signal
lololodota 2015-03-19
  • 打赏
  • 举报
回复
简单地说就是: ui.tableWidget_3->setItem(row,column,new QTableWidgetItem(QString::number(price,10,1))); qDebug()<<"refresh"<<endl; 在上面的代码当中,如何在给tableWidget_3赋值之后,刷新tableWidget_3的显示
lynnhua_ 2015-03-19
  • 打赏
  • 举报
回复
启动线程来处理吧,所有刷新数据有线程处理,界面就可以实时刷新,且不会卡。
  • 打赏
  • 举报
回复
试一下,用signal触发
lololodota 2015-03-19
  • 打赏
  • 举报
回复
求各位大神指点!!!

16,199

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧