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;
本文作者:Neko_Code
本文链接:https://www.cnblogs.com/NekoBlog/p/17780515.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步