我有一个Qt应用程序,它使用一个QMainWindow主要UI 的派生类.在启动时,我想进行一些安全检查,如果失败,则向用户显示一条消息并关闭主窗口.目前我在QMainWindow构造函数中进行了这些检查,但是如果我调用该close方法,则没有任何反应,应用程序继续运行.例如:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
setupUi(this);
...
if (checkFails())
{
QMessageBox::warning(this, tr("Error"), tr("You cannot run this app"));
// This has no effect
close();
}
}
Run Code Online (Sandbox Code Playgroud)
或者,我可以在main函数中进行检查,但后来我失去了显示特定于语言的消息框的能力(tr宏只能在QObject事物的外观中起作用.)
有关如何在启动时关闭主窗口或使tr宏在QObject派生类之外工作的任何想法?
Ton*_*vel 26
在成功关闭主窗口之前,需要运行事件循环.由于您可能首先构造一个窗口,然后启动事件循环,因此close()调用无效.请尝试以下解决方案:
QTimer::singleShot(0, this, SLOT(close()));
Run Code Online (Sandbox Code Playgroud)
QTimer::singleShot()一旦启动事件循环,将立即触发,然后close()在应用程序主窗口上调用该方法.
上述解决方案可能会导致您的主应用程序窗口在短时间内可见,从而导致不必要的闪烁.
更清洁的解决方案应在构建主窗口之前执行安全检查.由于tr()也可以作为静态方法使用QObject,因此可以从main函数完成.
| 归档时间: |
|
| 查看次数: |
5125 次 |
| 最近记录: |