gpt4 book ai didi

c++ - 如何在下一个函数调用之前完全显示 QMessageBox

转载 作者:太空宇宙 更新时间:2023-11-04 11:51:20 24 4
gpt4 key购买 nike

我想使用 QMessageBox 向用户宣布一个短暂的等待间隔。

QMessageBox* box(new QMessageBox(QMessageBox::Information,"Parser","Processing " + mFileName));
box->setStandardButtons(QMessageBox::NoButton);
box->setWindowModality(Qt::WindowModal);
box->show();
QApplication::processEvents();

parser.analyseFile(mFileName);

box->hide();
box->deleteLater();
QApplication::processEvents();

该功能只需要几秒钟。该框已显示,但在功能完成之前图标和文本均未及时显示。为什么 QApplication::processEvents(); 在框完全显示之前不阻止程序继续。是否可以在不求助于线程的情况下实现所需的行为。

最佳答案

最好在单独的线程中进行处理,因为这样可以让 GUI 线程在任务完成时自由地处理鼠标事件、调整窗口大小等;这样 GUI 就不会暂时“卡住”。

但是,如果您不想生成线程,则可以从 analyseFile() 函数中定期调用 processEvents(),这会给您带来大致相同的行为。尝试至少每 50 毫秒调用一次,以避免 GUI 响应缓慢。

第二种可能是在某处添加一个插槽:

void MyClass :: ParseFile()
{
parser.analyseFile(mFileName);
box->hide();
box->deleteLater();
}

...然后像这样异步调用它:

QTimer::singleShot(0, this, SLOT(ParseFile()));

... 可能 给窗口系统足够的时间在 ParseFile() 执行之前完成 QMessageBox 的显示,或者它可能不会(在这种情况下,您可以尝试将 delay 参数从 0 增加改为 100 毫秒)。这有点 hacky,但它可以工作。

关于c++ - 如何在下一个函数调用之前完全显示 QMessageBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18138030/

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