QT-多窗口程序编程

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;


posted @ 2023-10-22 15:23  Neko_Code  阅读(104)  评论(0)    收藏  举报