【QT5学习笔记】2--信号槽的实现以及自定义槽函数

2–信号槽的实现以及自定义槽函数


目录

1–给窗口添加button

2.1 点击button关闭当前窗口
//头文件中声明button_close
QPushButton button_close;
//源文件中配置button_close
button_close.setParent(this);
button_close.setText("Close this Windows");
button_close.move(100,100);
//将button_close的信号QPushButton::clicked与this的槽函数QWidget::close相连接
//QT5中槽函数类似于回调函数,不是立即执行,而是等待信号被接收时才执行
connect(&button_close,&QPushButton::clicked,this,&QWidget::close);

其中QPushButton::clicked为信号,QWidget::close为槽函数

信号与槽函数特点:

​ 1、信号与槽都是函数

​ 2、信号只有声明,没有定义

​ 3、槽函数需要声明也需要定义

2.2 通过button新建子窗口

​ 新建子窗口类SubW,项目名右键–>Add New…–> C++ Class -->输入Class name, Base class选择QWidegt–>添加到.pro文件–>完成。

​ 给subW编写构造函数,设置子窗口界面。这里给SubW添加一个button。

//SubW.cpp
SubW::SubW(QWidget *parent) : QWidget(parent)
{
    this->resize(200,400);
    this->move(1500,500);
    this->setWindowTitle("subWindows");
    sub_button.setParent(this);
    sub_button.setText("subButton");
    sub_button.move(60,100);
}

​ 为了能够实现点击主窗口的按钮,需要给MainWidget类中的button添加自定义槽函数,来完成我们想要实现的功能。

自定义槽函数特点:

​ 1、可以是任意类成员函数,全局函数,静态函数以及lambda表达式

​ 2、槽函数需要与信号相对应(参数,返回值)

​ 返回值:信号 void–>槽函数 void

​ 参数: 槽函数的参数是为了能接收信号的参数

​ 槽函数的参数要小于等于信号参数的数量

​ 3、槽函数可以重载

//MainWidget.h
...
#include "SubW.h"
...
class MainWidget : public QWidget
{
    Q_OBJECT
private:
	...
    QPushButton button_create_subwindows;
	SubW sub_windows;
public:
    ...
    MainWidget(QWidget *parent = nullptr);
    ~MainWidget();
    //声明槽函数
    void createSubWindows();
};
//MainWidget.cpp
//构造函数中连接信号与槽
MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
...
    button_create_subwindows.setParent(this);
    button_create_subwindows.setText("create the subWindows");
    button_create_subwindows.move(100,100);
	connect(&button_create_subwindows,&QPushButton::clicked,this,&MainWidget::createSubWindows);
...
}
//定义槽函数
void MainWidget::createSubWindows()
{
    sub_windows.show();
}

​ 自此,可以实现如图所示效果,点击MainWindows中create the subWindows的button,可以创建subWindows。

在这里插入图片描述

​ 按照相同的方法,我们可以继续给MainWindows添加一个隐藏subWindows的button。

//MainWidget.h
...
#include "SubW.h"
...
class MainWidget : public QWidget
{
    Q_OBJECT
private:
	...
    QPushButton button_create_subwindows;
    QPushButton button_hidden_subwindows;
	SubW sub_windows;
public:
    ...
    MainWidget(QWidget *parent = nullptr);
    ~MainWidget();
    //声明槽函数
    void createSubWindows();
    void hiddenSubWindows();
};
//MainWidget.cpp
//构造函数中连接信号与槽
MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
...
    button_create_subwindows.setParent(this);
    button_create_subwindows.setText("create the subWindows");
    button_create_subwindows.move(100,100);
	connect(&button_create_subwindows,&QPushButton::clicked,this,&MainWidget::createSubWindows);
	
	
    button_hidden_subwindows.setParent(this);
    button_hidden_subwindows.setText("hidden the subWindows");
    button_hidden_subwindows.move(100,200);
    connect(&button_hidden_subwindows,&QPushButton::clicked,this,&MainWidget::hiddenSubWindows);
...
}
//定义槽函数
void MainWidget::createSubWindows()
{
    sub_windows.show();
}

void MainWidget::hiddenSubWindows()
{
    sub_windows.hide();
}

​ 到此为止,可以实现点击MainWindows中create the subWindows的button创建subWindows,点击MainWindows中的hidden the subWindows隐藏subWindows。

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值