```cpp int main(int argc, char *argv[]) { QApplication a(argc, argv); QList<QScreen*> screens=QGuiApplication::screens(); if (screens.size()==1) { Widget w; w.show(); SecWiget secWidget;; secWidget.show(); } return a.exec(); } ``` 这段代码中为什么两个窗口同时一闪而过
时间: 2024-01-22 22:03:00 浏览: 75
这段代码中两个窗口同时一闪而过是因为在主函数中分别创建了两个窗口对象 `Widget w` 和 `SecWidget secWidget`,并且两个窗口对象的 `show()` 函数都被调用了,所以在 `a.exec()` 开始执行之前,两个窗口都被显示出来了,并且由于没有设置窗口的位置和大小,它们可能会重叠在一起,导致同时一闪而过的现象。如果想要解决这个问题,可以在创建第二个窗口的时候,调用 `move()` 函数设置第二个窗口的位置,或者在构造函数中设置窗口的默认位置和大小。
相关问题
Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); secWidget=new SecWiget(); secWidget->show(); } int main(int argc, char *argv[]) { QApplication a(argc, argv); QList<QScreen*> screens=QGuiApplication::screens(); if (screens.size()==1) { Widget w; w.show(); } return a.exec(); } 这段代码中,在Widget类的构造函数中创建了一个新的QWidget对象secWidget并显示,但是最终的结果主窗口w一闪而过,则把main函数替换成下面的代码,则主窗口w和第二个窗口secWidget都会独立显示出来,这是为什么 int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }
将main函数替换成int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }之后,主窗口w被创建并显示出来,因为没有使用QGuiApplication::screens()函数限制屏幕数量,所以无论有多少个屏幕,主窗口w都会显示在默认的屏幕上,并且由于我们没有将secWidget设置为w的子对象,所以它会作为一个独立的窗口显示。因此,主窗口w和secWidget都会独立显示出来。但是需要注意,在这种情况下,secWidget关闭时机也需要单独考虑,否则可能会出现不必要的问题。
int main(int argc, char *argv[]) { QApplication a(argc, argv); QList<QScreen*> screens=QGuiApplication::screens(); if (screens.size()==1) { Widget w; w.show(); SecWiget secWidget;; secWidget.show(); return a.exec(); } } 这段代码,将return a.exec放在if语句块内,两个界面能够正常的独立显示,如果将return a.exec放在if语句块外,两个界面都会一闪而过,这是为什么
将 `return a.exec()` 放在 if 语句块内时,两个界面能够正常独立显示,是因为在 if 语句块内只有满足条件时才会创建并显示两个窗口,然后程序进入消息循环,等待用户交互。当用户关闭其中一个窗口时,消息循环继续,直到所有窗口都关闭,然后程序执行 `return a.exec()`,退出消息循环,结束程序的运行。
而当将 `return a.exec()` 放在 if 语句块外时,无论是否满足条件,都会创建并显示两个窗口,然后程序立即进入消息循环,等待用户交互。但是,由于两个窗口都没有设置位置和大小,它们可能会重叠在一起,导致同时一闪而过的现象。当用户关闭其中一个窗口时,消息循环继续,直到所有窗口都关闭,然后程序执行 `return a.exec()`,退出消息循环,结束程序的运行。
阅读全文