QT自定义信号实现父子窗口的切换

1.父子窗口

2.父窗口通过点击按钮来显示子窗口(用到自定义槽函数)

3.子窗口通过点击按钮来返回父窗口(用到自定义信号)


1.父子窗口

父窗口和子窗口的意思是,子窗口是父窗口的一个成员。例如父窗口中点击一下按钮就出现子窗口

1.添加一个新的C++ class文件作为新窗口

类名我写为 childwindow,这个当然可以自己想写什么类名都行。


上图,完成后就会出现两个文件,childwindow.h 和 childwindow.cpp

2.在mainwindow.h中引入childwindow的头文件。

然后在 mainwindow类中 定义一个childwindow 对象。即使childwindow窗口是mainwindow窗口的一个成员。

/*mainwindow.h*/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "childwindow.h"   //包含childwindow
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    childwindow cw; //创建childwindow实例
};

#endif // MAINWINDOW_H
做到这步,就已经做好父窗口与子窗口的关系确定了。


2.父窗口通过点击按钮来显示子窗口(用到自定义槽函数)

如果自定义槽函数请看本博客的qt分类中的另一篇文章(QT的信号和槽函数)。

操作mainwindow.h 和 mainwindow.cpp 即可。

mainwindow.h 相当于一个名单:列出mainwindow中 有什么东西。

        mainwindow.cpp 相当于列出mainwindow里的东西具体怎么实现。

/*mainwindow.h*/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "childwindow.h"   //包含childwindow
#include <QPushButton>     //按钮控件的头文件
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    childwindow cw; //创建childwindow实例
    QPushButton b; //创建一个按钮,是父窗口的一个成员
    void ChangeToChild(); //定义一个槽函数,用于切换到子窗口
};

#endif // MAINWINDOW_H

/*mainwindow.cpp*/
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    b.setParent(this);//设置按钮的父对象为mainwindow
    b.setGeometry(100,100,150,30);   //设置按钮的位置和大小
    b.setText("show childwindow");  //设置按钮上写着的内容
    connect(&b,&QPushButton::pressed,this,&MainWindow::ChangeToChild);  //按钮绑定自定义的槽函数,当pressd(按下时)父窗口就会触发ChangeToChild()函数
}

void MainWindow::ChangeToChild()    //自定义的槽函数,执行的效果是隐藏父窗口,显示子窗口
{
    this->hide();
    cw.show();
}

MainWindow::~MainWindow()
{

}
执行的效果就是,当按下按钮时,父窗口就会隐藏,子窗口就会出现。


3.子窗口通过点击按钮来返回父窗口(用到自定义信号)

1.由于父窗口不是子窗口的成员(即父窗口类不在子窗口类里面),所以子窗口不能直接操作父窗口。那么子窗口怎么操作父窗口呢?就通过发送信号,然后让父窗口对其信号感兴趣,但父窗口捕捉到子窗口发的信号时,父窗口就自己操作自己。

2.自定义的信号时通过自定义槽函数发送的

3.自定义的信号也是一个返回void 的函数。


步骤:

1.在子窗口的cpp源文件中(childwindow.cpp),声明一个自定义信号(void mysignal()) 和 一个用于发送自定义信号的自定义槽函数( void sendMysignal() )。

2.在子窗口的cpp源文件中(childwindow.cpp),定义槽函数(void sendMysignal())

3.在子窗口的cpp源文件中(childwindow.cpp),调用connect绑定当按钮按下时,子窗口就调用槽函数(sendMysingal())来发射自定义信号

4.在父窗口的cpp源文件中(mainwindow.cpp),调用connect绑定当接受到子窗口发来的自定义信号后,父窗口就显示自己


代码:







执行后,就可以看到点击父窗口的按钮后会显示子窗口

点击子窗口的按钮后会返回父窗口




评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值