我正在构建一些代码,我正在运行一个while循环,并且在循环中,我试图用QLineEdit的setText()来改变几个文本框的内容。但是,仅在循环中调用setText不起作用;文本框只在代码运行后才更改其实际值,而不是在每次迭代时更改。
我对C ++或Qt的经验不多,但我正在研究的项目必须使用它们。有什么帮助吗?
编辑:我猜这一定很简单,因为我缺乏熟悉/知识,我只是遇到麻烦,但如果需要更多信息,我很乐意提供!答案 0 :(得分:4)
问题是QT需要控制才能返回到UI线程的事件循环,以便更新QLineEdit的视觉外观。运行事件循环的快捷方式是在每次调用QCoreApplication::processEvents()
后添加setText()
。修复它的正确方法是移动阻塞过程,将文本框的值设置为另一个线程,公开updateText(QString text)
信号,将其连接到TextBox的setText(const QString & text)
槽并随时发出该信号希望文本更新。
有关详细信息,请参阅我对类似问题的回答:unexplained delay after QProgressBar finish loading
您可能还想查看有关QThreads和Qt信号槽系统的一些文档:http://harmattan-dev.nokia.com/docs/library/html/qt4/threads-qobject.html
答案 1 :(得分:1)
在我的情况下,只调用repaint()或processEvents()将无法完成这项工作。
在您的功能循环中,调用 QCoreApplication::processEvents();
和repaint();
:
for (i;...)
{
//do your calculations
//...
QCoreApplication::processEvents();
repaint();
}
调用ui-> mywidget-> update()也没有任何不同。
(在Koduntu 12.10上测试Qt4.8.3和在Windows XP上测试Qt5.0.1)