我正在构建一个桌面应用程序,该应用程序检查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文件之外,
MainWindow
和LoginWindow
都没有加载任何东西,它们在功能上是相同的。奇怪的是,如果我对
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/