我有一个 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();
}
}
或者我可以在 main 函数中进行检查,但是我失去了显示特定语言消息框的能力(tr
宏只在 QObject
中工作-从事物的外观派生类。)
关于如何在启动时关闭主窗口或使 tr
宏在 QObject
派生类之外工作的任何想法?
最佳答案
事件循环需要运行才能成功关闭主窗口。由于您可能首先构建一个窗口,然后启动事件循环,因此 close()
调用没有任何效果。请尝试以下解决方案:
QTimer::singleShot(0, this, SLOT(close()));
QTimer::singleShot()
将在事件循环启动后立即触发,随后调用应用程序主窗口上的 close()
方法。
上述解决方案可能会导致您的主应用程序窗口在短时间内可见,从而导致不必要的闪烁。
更简洁的解决方案应该在构建主窗口之前执行安全检查。由于 tr()
也可作为 QObject
上的静态方法使用,因此这可以从主函数完成。
关于c++ - 在启动时关闭 QMainWindow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2356778/