Qt 4.8.5 Understanding QMessagebox .exec() and .show()
Qt 4.8.5 Understanding QMessagebox .exec() and .show()
我正在使用QT 4.8.5进行QWizard,在某些页面中,我必须关闭其他一些应用程序并退出我的程序。这工作正常,但现在我想显示一条弹出消息,告诉用户程序正在重新启动(还有其他人是我的一部分,我的是最后一个总是关闭的)。我用来显示弹出窗口的代码是下一个代码,我将其放在 QWizardpage 的验证页面中:
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(); ),这正是我想要的......但是弹出窗口中没有显示任何消息...我看不到图标,标题或文本... :S 我不知道为什么:(
而当使用 ->exec(); 而不是显示时,图标、标题和文本会显示,但是当弹出窗口出现时,在用户关闭该弹出窗口之前不会执行任何操作... :S
我知道 .exec() 会冻结所有内容,直到用户关闭弹出窗口而显示不...
那么......我怎样才能看到带有show()行为的文本?我不希望用户与该弹出窗口进行交互,我只需要弹出窗口在关闭所有弹出窗口时显示,直到我的程序也关闭......
非常感谢!
相关:http://comments.gmane.org/gmane.comp.lib.qt.general/30706
总之,QDialog::exec()
会创建一个具有自己的事件循环的模式对话框(无论您的Qt::NonModal
设置如何),而::show()
不会。
因此,在您的情况下,::exec()
将完全呈现对话框,但它会阻止其余的后台处理。 ::show()
不会阻塞,但由于它与其他代码共享事件循环,因此由于背景代码,它无法清空事件队列(其中包含对话框中的所有显示/布局/呈现事件)。
我会尝试以下方法:
- 使用
::show()
不::exec()
- 使用
QDialog::raise()
和Dialog::activateWindow()
强制对话框置于最前面 - (重要部分)要么
- 在后台处理任务中调用
QApplication::processEvents()
(例如,在长时间运行的循环中)。 - 将后台处理生成到线程中(这可能很容易,也可能不容易,具体取决于代码的结构),以允许主事件循环处理对话事件。
- 在后台处理任务中调用
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 位阵列上的快速AND运算
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- BoostPython and CMake
- OpenSSL BIO and SSL_read
- Gurobi GRBModel and GRBmodel in C++
- std::visit and std::variant usage
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- Directx12 and keystrokes
- different between int **arr =new int [ n]; and int a[i][j]?
- C++ getenv and setenv
- Inference pytorch C++ with alexnet and cv::imread image
- Visual Studio 2019 C++ and std::filesystem
- 保证逻辑 AND 表达式中的函数调用
- python ctypes and C++ pointers
- C++ const char with .begin() and .end()
- Threads with Classes and std::packaged_task
- Qt 4.8.5 Understanding QMessagebox .exec() and .show()