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(); }
时间: 2024-01-22 19:04:11 浏览: 59
将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关闭时机也需要单独考虑,否则可能会出现不必要的问题。
相关问题
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); this->setWindowTitle("display"); ProInit(); SqlInit(); InitPlot(ui->widget); }
这段代码是一个 Qt 程序中的构造函数,用于初始化 Widget 类对象。在这个函数中,首先通过 `ui->setupUi()` 函数将 Widget 对象与 UI 界面进行关联,使得界面中的控件可以在代码中被访问和操作。
接下来,通过 `setWindowTitle()` 函数为 Widget 窗口设置了一个标题为 "display"。
然后,调用了 `ProInit()` 和 `SqlInit()` 两个函数进行程序的初始化。这两个函数分别用于初始化程序所需的一些全局变量和进行 SQLite 数据库的初始化操作。
最后,通过 `InitPlot(ui->widget)` 函数初始化了 `ui->widget` 控件中的一个绘图窗口。这个函数可能是用于初始化一个数据可视化的工具,例如在绘制曲线图或散点图时使用的 QCustomPlot 库。
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); // 设置UI界面
这段代码是一个构造函数,用于创建Widget对象并初始化UI界面。在这个构造函数中,我们首先调用了QWidget类的构造函数,将父类指针parent传递进去,然后创建了一个新的Ui::Widget对象ui,并调用了它的setupUi()函数,将UI界面设置到Widget对象上。
具体来说,ui对象是在Widget类中定义的一个指向Ui::Widget的指针,Ui::Widget是通过Qt Designer自动生成的头文件,它包含了UI类的定义,其中包括了UI界面上所有控件的声明和初始化。在调用ui->setupUi(this)函数时,会将UI界面上所有控件与Widget对象上的对应控件进行连接,从而完成UI界面的初始化。
需要注意的是,这个构造函数是自动生成的,你不需要手动编写它。如果你在Qt Designer中设计了UI界面,并将UI文件添加到了工程中,Qt Creator会自动为你生成这个构造函数。
阅读全文