动态更改QLineEdit TextBox的循环内部

时间:2013-01-18 17:45:10

标签: c++ qt

我正在构建一些代码,我正在运行一个while循环,并且在循环中,我试图用QLineEdit的setText()来改变几个文本框的内容。但是,仅在循环中调用setText不起作用;文本框只在代码运行后才更改其实际值,而不是在每次迭代时更改。

我对C ++或Qt的经验不多,但我正在研究的项目必须使用它们。有什么帮助吗?

编辑:我猜这一定很简单,因为我缺乏熟悉/知识,我只是遇到麻烦,但如果需要更多信息,我很乐意提供!

2 个答案:

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