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绑定当接受到子窗口发来的自定义信号后,父窗口就显示自己
代码:
执行后,就可以看到点击父窗口的按钮后会显示子窗口
点击子窗口的按钮后会返回父窗口