gpt4 book ai didi

qt - 使用 QProgressDialog : Any ideas why this doesn't work properly? 的简单示例

转载 作者:行者123 更新时间:2023-12-04 05:56:26 33 4
gpt4 key购买 nike

我想用 QProgressDialog 做一个简单的例子。所以我在一个小部件中有一个 QPushButton,当我按下它时,会出现一个 QProgressDialog,直到 100 然后隐藏。

我的问题是,如果我第二次单击保存按钮, QProgressDialog 就会出现并消失。

当用户按下按钮时调用的我的插槽代码:

progressDialog->show();
progressDialog->setWindowModality(Qt::WindowModal);
for(int i = 0; i <= 100; ++i)
{
progressDialog->setValue(i);

if(progressDialog->wasCanceled())
break;
}

最佳答案

您需要允许 GUI 更新/重绘自身。它不会在每次 setXXX 调用时都这样做,因为它太昂贵且没有必要。但是,redraw() 事件已排队,因此如果您允许 Qt 处理事件,对话框将更新。

只需在 for 循环中添加以下内容,然后阅读 it's documentation进一步的使用场景:

 QApplication::processEvents();

此外,您的循环运行速度太快,无法显示任何内容。添加 sleep 电话或做一些有用的工作以查看任何内容。

更新 (谢谢蒂姆)

您可能想使用 QApplication::processEvents( QEventLoop::ExcludeUserInputEvents)禁止用户事件(还有一个网络事件选项)。它们可能会触发应用程序中的其他部分并导致重入和其他不需要的控制流。

但在您的情况下,您可能希望包含用户事件以获取取消按钮。

关于qt - 使用 QProgressDialog : Any ideas why this doesn't work properly? 的简单示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8399349/

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