c++ - 在启动时关闭 QMainWindow?

标签 c++ qt

我有一个 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/

相关文章:

c++ - 等待 QLineEdit::onTextChanged 中输入的最后一个字符

python - Qt 的 absoluteFilePath() 方法返回错误的路径

c++ - Qt:改变字体粗细

c++ - Qt - QGridLayout 访问坐标处的元素

c++ - Windows 8 任务管理器虚拟化选项

C++ 元素访问无法正常工作?

传递函数参数时的 C++ 执行顺序

qt - QML 中宽度、高度和隐式宽度/高度与相应用例之间的差异

java - 如何让 android 使用我的 QtActivity 子类而不是原来的 QtActivity?

c++ - const_cast 是否返回尖括号内指定的类型