exec()解析
引用参考:qt中main函数中的exec()作用总结_qt exec-CSDN博客
int main(int argc,char* argv[])
{
QApplication a(argc,argv);
MainWindow w;
w.show();
return a.exec(); //出现在此处
}
main函数的返回直接交由系统(更底层)进行处理,exec的作用则确定与系统处理(底层交互)有关.
exec实质为事件的循环等待指令,exec成立的状态内将等待用户和系统的消息(包括信号与槽处理消息)并处理,当出现例如exit()的调用时,exec()函数的值就会返回并结束该等待状态;
Qt的main函数实质为初始化工作,为准备阶段的工作,控制权交由qt后,所有接下来的事件处理将有qt的事件循环完成.
窗口显示机制
show函数与exec函数的区别
参考:QT显示一个窗体,show()函数和exec()函数有什么区别?_msg_box.exec()和msg_box.show()的区别-CSDN博客
show函数本质上是显示一个可供选择的模式页面,该页面不会锁住其他程序的运行,即show的窗口显示后,其他窗口的操作虽然被禁止了,但该show函数之后的代码依旧在继续执行.
exec函数本质上是显示一个模态化的页面,该函数执行后,程序会被锁在原地,等待窗口响应,直到窗口关闭.
简单的页面显示例子:
apage.h
#ifndef APAGE_H
#define APAGE_H
#include <QObject>
#include <QWidget>
class APage : public QWidget
{
Q_OBJECT
public:
explicit APage(QWidget *parent = nullptr);
signals:
};
#endif // APAGE_H
apage.cpp里面默认构造函数是空的,仅供参考的页面
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>
#include <QHBoxLayout>
#include "apage.h"
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
public slots:
void do_Click_PB();
private:
QPushButton *pb;
QHBoxLayout *hl1;
APage pg1;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
pb = new QPushButton("点击展开一个对话框");
hl1 = new QHBoxLayout();
hl1->addWidget(pb);
this->setLayout(hl1);
connect(pb,SIGNAL(clicked(bool)),this,SLOT(do_Click_PB()));
}
Widget::~Widget()
{
delete pb;
delete hl1;
}
void Widget::do_Click_PB()
{
pg1.show();
}
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
效果是主页面点击QPushButton打开一个非模态的apage widget;
标签:main,Widget,编程,QT,show,多窗口,exec,include,函数 From: https://www.cnblogs.com/NekoBlog/p/17780515.html