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。