QT中的自定义信号以及自定义函数

信号与槽函数是QT的一大创新,通过自定义信号与槽函数可以实现自己想实现的功能。

标准的信号与槽写法如下:connect(&button,&QPushButton::clicked,this,&QWidget::close);

参数说明:

(1) &button :信号发出者,指针类型

(2)&QPushButton::clicked :处理的信号, &发送者的类名::信号名字 (不用加函数括号,只需要名字即可)这里说的是button的点击操作

(3) this : 信号接收者 ,指针类型 这里指的是当前窗口

(4)&QWidget::close :&接收者的类名::槽函数名字

自定义槽函数

普通函数的用法,任意的成员函数,普通全局函数,静态函数都可以作为槽函数

槽函数需要和信号一致(参数,返回值)由于信号都是没有返回值,所以槽函数一般都没有返回值

自定义信号,信号必须有signals关键字来声明

信号没有返回值,但可以有参数,信号就是函数的声明,只需声明,无需定义

使用:emit (一般都是通过自定义槽函数发送信号出去)

 

来举例说明,建立一个窗口和另一个窗口,一个作为 父窗口,另一个作为 子窗口,每个窗口上面 设置按钮,发生点击信号响应当前窗口隐藏,另一个窗口显示。

1.项目目录如下:

2.代码文件:

Headers 头文件

(1)sonwidget.h文件:

#ifndef SONWIDGET_H
#define SONWIDGET_H

#include <QWidget>
#include <QPushButton>
class Sonwidget : public QWidget
{
    Q_OBJECT
public:
    explicit Sonwidget(QWidget *parent = nullptr);
    QPushButton *button2;

    //自定义信号
signals:
    //信号没有返回值,可以有参数,信号函数不需要定义,只需要声明
    void show_hide_singal(int a);
    //自定义槽函数
public slots:
    void emit_mysignal();
};

#endif // SONWIDGET_H

(2)widget.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include "sonwidget.h"
#include "QPushButton"
class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();
    //类成员变量
    Sonwidget *sonwidget;//子窗口
    QPushButton *button1;//按钮

    //自定义的槽函数
public slots:
    void button_click1();//按钮响应的槽函数
    void signal();//子窗口响应的槽函数
};

#endif // WIDGET_H

 

Sources文件

(1)main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

(2)sonwidget.cpp文件

#include "sonwidget.h"
#include "QPushButton"
Sonwidget::Sonwidget(QWidget *parent) : QWidget(parent)
{
    this->setWindowTitle("子窗口");
    //设置按钮
    button2=new QPushButton("显示父窗口,隐藏子窗口",this);
    //设置连接,子窗口,子窗口的信号为按钮的点击响应,槽函数为父窗口的自定义函数
    connect(button2,&QPushButton::clicked,this,&Sonwidget::emit_mysignal);
}

void Sonwidget::emit_mysignal(){
    //点击按钮的函数
    emit show_hide_singal(10);
}

(3)widget.cpp文件

#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //父窗口设置标题
    this->setWindowTitle("父窗口");
    //设置当前窗口的子窗口
    this->sonwidget=new Sonwidget;
    //显示子窗口
    sonwidget->show();

    //设置按钮
    button1=new QPushButton("显示子窗口,隐藏父窗口",this);
    //设置连接,父窗口上的按钮。信号为点击按钮,槽函数为父窗口的自定义函数
    connect(button1,&QPushButton::clicked,this,&Widget::button_click1);
    //设置连接,子窗口,子窗口的信号,槽函数为父窗口的自定义函数
    connect(sonwidget,&Sonwidget::show_hide_singal,this,&Widget::signal);

}

//设置按钮连接的槽函数
void Widget::button_click1(){
    //父窗口隐藏
    this->hide();
    //子窗口显示
    this->sonwidget->show();
}

//设置子窗口连接的槽函数
void Widget::signal(){
    //父窗口显示
    this->show();
    //子窗口隐藏
    this->sonwidget->hide();
}

//类析构函数
Widget::~Widget()
{

}

 

  • 9
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Demo.demo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值