gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:51:01 29 4
gpt4 key购买 nike

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

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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com