当前位置:   article > 正文

QT主窗口与子窗口_qt 子窗口

qt 子窗口

根据基类QWidget派生出两个类,MainWidget和SubWidget,分别对应主窗口和子窗口

主窗口

主窗口切换到子窗口,我们把SubWidget的对象作为MainWidget的数据成员

主窗口MainWidget 的定义以及成员函数的实现如下:

#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include <QPushButton>
#include <QWidget>
#include "subwidget.h"  //子窗口头文件

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = nullptr);
    ~MainWidget();
    void mySlot();//自定义一个槽函数
    void subwinSlot();
    void subwinSlot2();
private:
    QPushButton b1;
    QPushButton *b2;
    QPushButton b3;
    SubWidget sub_w;  //创建一个子窗口对象,子窗口类的对象作为主窗口类的数据成员

};
#endif // MAINWIDGET_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

其中 SubWidget sub_w; //创建一个子窗口对象,子窗口类的对象作为主窗口类的数据成员

#include "mainwidget.h"
#include <QPushButton>

MainWidget::MainWidget(QWidget *parent)   //构造函数
    : QWidget(parent)
{

    b1.setParent(this);
    b1.setText("close");
    b1.move(100,100);

    b2=new QPushButton;     //创建一个动态内存
    b2->setText("按钮2");
    b2->move(100,200);
    b2->setParent(this);

    connect(&b1,&QPushButton::pressed,this,&MainWidget::close);
    /*
      * &b1:信号发出者,指针类型
      * &QPushButton::Press:处理的信号,  &发送者的类名::信号的名字
      * this:信号接收者
      * &MainWidget::close: 槽函数,信号处理函数  &接收的类名::槽函数的名字
    */

    /*
     * 自定义槽函数,普通函数的用法
     * Qt5:任意的成员函数,普通全局函数,静态函数
     * 槽函数需要和信号一致(参数,返回值)
     * 由于信号都是没有返回值,所以槽函数也没有返回值
     */
    connect(b2,&QPushButton::released,this,&MainWidget::mySlot); //b2动态分配空间,本来就是指针

    connect(b2,&QPushButton::pressed,&b1,&QPushButton::hide);

    this->setWindowTitle("主窗口");

    b3.setParent(this);
    b3.setText("切换到子窗口");
    b3.move(50,50);
    connect(&b3,&QPushButton::pressed,this,&MainWidget::subwinSlot);

    //处理子窗口的信号
    connect(&sub_w,&SubWidget::mySignal,this,&MainWidget::subwinSlot2);



    //设置窗口大小
    this->resize(800,600);
}
void MainWidget::mySlot()//成员函数的定义
{
    b2->setText("123");
}
void MainWidget::subwinSlot()
{
    //显示子窗口
    this->hide();
    sub_w.show();
}
void MainWidget::subwinSlot2()
{
    this->show();
    sub_w.hide();
}

MainWidget::~MainWidget()    //析构函数
{
}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70

子窗口

实现从子窗口切换到主窗口
这里用到了关键字signals(这是Qt的功能,不是C++的)
子窗口SubWidget的定义如下:

#ifndef SUBWIDGET_H
#define SUBWIDGET_H

#include <QWidget>
#include <QPushButton>
class SubWidget : public QWidget
{
    Q_OBJECT
public:
    explicit SubWidget(QWidget *parent = nullptr);
private:
    QPushButton b1;

public:
    void mainwinSlot();
signals:
    /*
     * 信号必须有signals关键字来生命
     * 信号没有返回值,但是可以有参数
     * 信号就是函数的声明,只需声明,无需定义
     * 使用:emit mySignal();
    */
    void mySignal();
};
#endif // SUBWIDGET_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

子窗口SubWidget类的成员函数的实现

#include "subwidget.h"

SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{
    this->setWindowTitle("子窗口");
    b1.setParent(this);
    b1.setText("返回主窗口");
    b1.move(100,100);
    connect(&b1,&QPushButton::released,this,&SubWidget::mainwinSlot);
    //使用自定义的槽函数
   //设置窗口大小
    this->resize(800,600);
}

void SubWidget::mainwinSlot()
{
    emit mySignal();//自定义槽函数的功能为发出信号
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

主窗口处理子窗口请求信号—返回主窗口界面

 //处理子窗口的信号
connect(&sub_w,&SubWidget::mySignal,this,&MainWidget::subwinSlot2);
void MainWidget::subwinSlot2()
{
    this->show();
    sub_w.hide();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

主函数如下:

#include "mainwidget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWidget w;  //创建一个MainWidget对象先执行类的构造函数
    w.show();
    return a.exec();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/730662
推荐阅读
相关标签
  

闽ICP备14008679号