首页 > 编程语言 >QT-多窗口程序编程

QT-多窗口程序编程

时间:2023-10-22 15:34:26浏览次数:45  
标签:main Widget 编程 QT show 多窗口 exec include 函数

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

相关文章

  • QT&TCL1 调用TCL解释器
    TCL作为一种工具语言已经在很多地方得到广泛的应用,在土木方面著名的例子就是ANSYS了。当然作为UCB开发的OpenSees自然也是要用自家的TCL语言了,不过最新的OpenSees源代码中已经增加了对于Python语言的支持。虽然官方尚没有公开Python的使用方式,但是相信应该很快就可以看到使用Python......
  • QT中的线程池的介绍和使用
    (文章目录)前言本篇文章将为大家讲解一下QT中线程池的概念和使用的方法。一、线程池概念讲解线程池是一种常见的并发编程模型,用于管理和复用多个线程来执行任务。它的基本思想是在应用程序启动时创建一组线程,这些线程可以重复使用,以执行一系列的任务,而不需要为每个任务都创建......
  • 编程学习思考
    编程学习的思考2023-10-2114:50:29星期六(初稿)大家好!自从大一开始进入计算机科学与技术专业学习,便就开始踏入编程的学习之旅。又是一个秋季,整整三年了!三年以来,自然是有不少成长,现在回想,这一路中也遇到很多的挫折,也受到过许多”愚蠢“的思想的影响···,跌跌撞撞地前行,当然在这......
  • 08_面向对象编程(高级)
    ......
  • 07_面向对象编程(进阶)
    ......
  • 实验二-类和对象_基础编程2
    task1t.hpp1#pragmaonce2#include<iostream>3#include<string>4usingnamespacestd;56classT{7public:8T(intx=0,inty=0);9T(constT&t);10T(T&&t);11~T();12voidset_m1(intx);13intget......
  • 探索Java中神奇的ThreadLocal:为什么它是多线程编程的重要工具?
    (文章目录)......
  • 《Unix/linux系统编程》教材第3章学习笔记
    |第3章|Unix/Linux进程管理多任务处理一般来说,多任务处理指的是同时进行几项独立活动的能力。在计算机技术中,多任务处理指的是同时执行几个独立的任务。在单处理器(单CPU)系统中,一次只能执行一个任务。多任务处理是通过在不同任务之间多路复用CPU的执行时间来实现的,即将CPU执行操......
  • 实验2 C语言分支与循环基础应用编程
    实验任务1#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineN1374#defineN2465intmain(){intnumber;inti;srand(time(0));for(i=0;i<N;++i){number=rand()%(N2-N1+1)+N1;pr......
  • 实验2 C语言分支与循环基础应用编程
    实验任务1源代码1#include<stdio.h>2#include<stdlib.h>3#include<time.h>45#defineN56#defineN13747#defineN246589intmain()10{11intnumber;12inti;1314srand(time(0));1516......