我正在构建一个桌面应用程序,该应用程序检查QSetting值,如果未设置该值,则显示一个QMainWindow类,但如果设置,则显示另一个QMainWindow类。到目前为止,这两个类实际上是相同的,并且实际上不包含任何内容。

在我的main函数中,这是我得到的:

int main (int argc, char *argv[]) {
    ...

    if (userToken == "NO_USER") {
       LoginWindow w;
       w.show();
    } else {
       MainWindow w;
       w.show();
    }

    return a.exec();
}


从创建项目到创建默认项目之间的唯一区别是增加了条件窗口加载。除了与它们相关联的ui文件之外,MainWindowLoginWindow都没有加载任何东西,它们在功能上是相同的。

奇怪的是,如果我对w.showFullScreen()执行LoginWindow,它将显示并占据整个屏幕,如果我不执行w.show(),则什么也没有发生,没有编译器警告|错误,应用程序运行正常,仅没有窗口显示。

如果删除条件语句和LoginWindow引用,MainWindow会显示正常。

知道为什么对.showFullScreen()的调用会起作用,而对同一类的.show()的调用却无效吗?

最佳答案

我不确定这是否可以解决您的问题,但是您的代码中肯定存在错误。您是在一个狭窄的范围内实例化堆栈上的窗口对象,并且您知道这些对象一旦超出该范围就会被破坏。您正在做的是让它们在应用程序启动之前超出范围。

请尝试以下方法:

int main (int argc, char *argv[]) {
    ...


    if (userToken == "NO_USER") {
       LoginWindow w;
       w.show();
      return a.exec();
    } else {
       MainWindow w;
       w.show();
      return a.exec();
    }


}

关于c++ - QMainWindow不是.show()但.showFullScreen()可以工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43097025/

10-11 16:13