(8)Qt中的自定义信号

目录

自定义信号需要遵循的规则

信号的发送

自定义信号的基本实现

使用一个父子窗口切换的小案例


        Qt框架提供的信号在某些特定场景下是无法满足我们的项目需求的,因此我们还设计自己需要的的信号,同样还是使用connect()对自定义的信号槽进行连接。

自定义信号需要遵循的规则

  • 信号是类的成员函数,并且返回类型必须是 void 类型

  • 信号函数只需要声明, 不需要定义(没有函数体实现)

  • 参数可以随意指定, 信号也支持重载

  • 信号需要使用 signals 关键字进行声明, 使用方法类似于public等关键字

  • 在程序中发送自定义信号: 发送信号的本质就是调用信号函数

信号的发送

emit mysignals();	//发送信号

emit是一个空宏,没有特殊含义,仅用来表示这个语句是发射一个信号,可以不写,但是不推荐。信号参数的作用是数据传递, 谁调用信号函数谁就指定实参,实参最终会被传递给槽函数。

自定义信号的基本实现

使用一个父子窗口切换的小案例

父窗口代码

#ifndef _WIDGET_H_
#define _WIDGET_H_

#include <QWidget>
#include <QPushButton>
#include "SubWidget.h"

class SubWidget;
class Widget : public QWidget
{
	Q_OBJECT
public:
	Widget(QWidget* parent = nullptr);
	~Widget();
private:
	QPushButton* m_btn = nullptr;
	SubWidget* m_subWidget = nullptr;
};

#endif
#include"Widget.h"

Widget::Widget(QWidget* parent)
	:QWidget(parent)
{
	resize(640, 480);								// 设置父窗口大小
	setWindowTitle("父窗口");						// 设置父窗口标题

	m_btn = new QPushButton("切换到子窗口", this);
	m_subWidget = new SubWidget;

	//实现从父窗口切换到子窗口的效果
	connect(m_btn, &QPushButton::clicked,[=]() {
		this->hide();
		m_subWidget->show();
	});

	//实现从子窗口切换到父窗口的效果
	connect(m_subWidget, &SubWidget::openMainWindow, [=]() {
		this->show();
		m_subWidget->hide();
	});
}

Widget::~Widget()
{

}

子窗口代码

#ifndef _SUBWIDGET_H_
#define _SUBWIDGET_H_
#include <QWidget>
#include <QPushButton>

class SubWidget : public QWidget
{
	Q_OBJECT
public:
	SubWidget(QWidget* parent = nullptr);
	~SubWidget();
private:
	QPushButton* m_btn;
signals:
	void openMainWindow();				//	自定义信号
};

#endif
#include "SubWidget.h"

SubWidget::SubWidget(QWidget* parent)
	:QWidget(parent)
{
	resize(400, 400);
	setWindowTitle("子窗口");

	m_btn = new QPushButton("切换到父窗口", this);

	//信号关联信号的方式发送信号
	//connect(m_btn, &QPushButton::clicked, this, &SubWidget::openMainWindow);
	
	//使用emit发送信号
	connect(m_btn, &QPushButton::clicked, this, [=](){
		emit openMainWindow();
	});
}

SubWidget::~SubWidget()
{

}

实现的效果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

石小浪♪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值
>