两个独立的窗口和自定义信号
1.两个独立的窗口
实现一个简单的窗口程序:首先有两个窗口,每个窗口当中都有一个按钮,当点击第一个窗口中的按钮时显示第二个窗口,隐藏第一个窗口,反之亦然。
2.自定义信号
自定义信号的规则
:
信号必须有signals进行声明
信号没有返回值但是可以有参数
信号就是函数的声明,没有实现也不需要实现
使用时必须加上emit + 自定义信号的方式使用
信号参数的个数可以比槽函数的参数个数多,反之不行
一个信号可以连接多个槽,但是槽函数的执行顺序是随机的,不受控制
槽函数可以同时接收多个信号
信号连接成功后可以断开连接disconnect
信号可以连接信号
槽函数可以是lanbda表达式
mainwidget.h
:
#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include <QWidget>
#include <QPushButton>
#include "subwidget.h"
class MainWidget : public QWidget
{
Q_OBJECT
public:
MainWidget(QWidget *parent = 0);
~MainWidget();
void ChengeWin();//槽函数,当调用该函数时主窗口隐藏,子窗口显示
void dealsub();//槽函数,当调用该函数时主窗口显示,子窗口隐藏
private:
QPushButton b3;//主窗口中的按钮
SubWidget w;//主窗口中创建另外子一个窗口的对象
};
#endif // MAINWIDGET_H
subwidget.h
:
#ifndef SUBWIDGET_H
#define SUBWIDGET_H
#include <QWidget>
#include <QPushButton>
class SubWidget : public QWidget
{
Q_OBJECT
public:
explicit SubWidget(QWidget *parent = nullptr);
void SendSolt();//槽函数:功能是发送自定义的信号
signals:
void Mysignal();//自定义的信号
public slots:
private:
QPushButton b;//自窗口当中的按钮
};
#endif // SUBWIDGET_H
mainwidget.cpp
:
#include "mainwidget.h"
MainWidget::MainWidget(QWidget *parent)
: QWidget(parent)
{
//给主窗口当中设置内容
setWindowTitle("lao da");
b3.setParent(this);
b3.setText("get xiao di win");
b3.move(210,210);
//关联主窗口当中的b3按钮和主窗口,当触发released信号时就执行ChengeWin槽函数
connect(&b3,&QPushButton::released,this,&MainWidget::ChengeWin);
//关联子窗口和主窗口,当主窗口触发Mysignal时执行dealsub槽函数
connect(&w,&SubWidget::Mysignal,this,&MainWidget::dealsub);
//固定窗口大小
resize(400,400);
}
//对子窗口发送过来的信号进行处理
void MainWidget::dealsub()
{
w.hide();//子窗口隐藏
this->show();//主窗口显示
}
//按钮发送给主窗口的槽函数
void MainWidget::ChengeWin()
{
w.show();//子窗口显示
this->hide();//主窗口隐藏
}
subwidget.cpp
:
#include "subwidget.h"
SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{
//设置自窗口属性
this->setWindowTitle("xiao di");
b.setParent(this);
b.move(80,80);
b.setText("get lao da win");
//关联按钮和子窗口,当触发clicked信号时,执行SendSolt槽函数,
//向主窗口发送自定义信号
connect(&b,&QPushButton::clicked,this,&SubWidget::SendSolt);
//固定窗口大小
resize(400,400);
}
//给主窗口发送一个自定义的Mysignal信号
void SubWidget::SendSolt()
{
emit Mysignal();
}
main.cpp
:
#include "mainwidget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWidget w;
w.show();
return a.exec();
}