我正在使用QT 4.8.5进行QWizard,在某些页面中,我必须关闭其他一些应用程序并退出程序。这工作正常,但现在我想显示一条弹出消息,告诉用户程序正在重新启动(还有其他部分我和我的是最后一个要关闭的程序)。我用来显示弹出窗口的代码是下一个,我把它放在QWizardpage的validatepage中:
QMessageBox *msgBox1 = new QMessageBox;
msgBox1->setWindowTitle("Title...");
msgBox1->setIcon(QMessageBox::Information);
msgBox1->setText(" blablablalbal bla bla bla.");
msgBox1->setWindowModality(Qt::NonModal);
msgBox1->show();
QCoreApplication::processEvents(); // without this line, the show does nothing and I can't see my pop up window
所以问题是:使用该代码,当我在该向导页面并单击完成时,它启动QMessageBox,同时(后面)程序重新启动其他应用程序然后自行关闭(使用QApplication :: quit( );)这正是我想要的......但是弹出窗口中没有显示任何消息......我看不到图标,标题或文字......:SI不知道原因:(< / p>
然而当使用 - &gt; exec();而不是显示,显示图标,标题和文本但是当弹出窗口显示时,在用户关闭弹出窗口之后不会执行任何操作...:S
我知道.exec()会冻结所有内容,直到用户关闭弹出窗口而show不显示...
那么......我怎样才能看到带有show()行为的文本?我不希望用户与弹出窗口进行交互,我只需要在关闭所有内容时弹出显示,直到我的程序关闭...
非常感谢你!
答案 0 :(得分:1)
相关:http://comments.gmane.org/gmane.comp.lib.qt.general/30706
总之,Error:The markup in the document preceding the root element must be well-formed.
使用自己的事件循环创建了一个模式对话框(无论您的QDialog::exec()
设置如何),Qt::NonModal
没有。
因此,在您的情况下,::show()
将完全呈现对话框,但它会阻止其余的后台处理。 ::exec()
不会阻止,但由于它与您的其他代码共享事件循环,因此无法清空事件队列(其中包含对话框中的所有show / layout / render事件)你的背景代码。
我会尝试以下方法:
::show()
而非::show()
::exec()
和QDialog::raise()
Dialog::activateWindow()
(例如,在长时间运行的循环中)。