qt - 函数运行时如何设置标签文本?

标签 qt qt4 qmainwindow mainwindow

我想在代码中的函数运行时在主窗口上设置标签文本。但是标签在函数结束之前不会改变。

for (int i = 0; i < files.size(); ++i) {

    ui->label->setText(files[i]);
    myfoo();

}

最佳答案

看不到标签更新的原因是更新 GUI 的主线程正忙于您的 for 循环,没有时间处理导致 GUI 小部件重绘的事件.

虽然您可以使用 QApplication::processEvents,但这并不理想,尤其是在您的函数处理期间收到许多事件的情况下。

处理此问题的正确方法是创建一个单独的线程 (QThread) 和一个派生自 QObject 的对象,该对象将在向主 (GUI) 线程发送消息以更新标签时正常工作。

与其重复代码,我建议您阅读 this article关于如何正确使用 QThread。没那么难。

然后你会改变你的函数,它现在在第二个线程的对象中,像这样:-

for (int i = 0; i < files.size(); ++i) 
{
    // calling UpdateLabel signal, which connects to an object on the main thread
    UpdateLabel(files[i]);        
    myfoo();  
}

假设来自 Worker 类的信号已连接到主线程上对象中的槽,例如 QMainWindow,您将在槽中接收文本并更新标签:-

void QMainWindow::UpdateLabel(const QString text)
{
    ui->label->setText(text);
}

关于qt - 函数运行时如何设置标签文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22715564/

相关文章:

c++ - QT中如何在启动前播放声音?

java - 您会为共享软件/免费软件桌面应用程序使用什么语言/平台?

c++ - Qt 信号和槽线程安全

c++ - 是否可以在没有接收器实例的情况下将信号连接到静态插槽?

qt - 将图像原始数据缓冲区设置为 QMediaPlayer

c++ - 如何使用 FFMPEG 访问帧缓冲区?

c++ - 如何在 QT GUI 应用程序中进行正确的线程处理?

c++ - 将值从主窗口更新到对话框

python - 如何更改 QMainWindow 边框和标题栏的颜色?

qt4 - QML 自定义属性