Qt信号槽使用

目录

Push Button

自定义信号槽

自定义槽

举例


Push Button

 双击打开设计

拖动Push Button,右侧属性与值的位置修改名字:

 切换到原文件使用(ui就说明是设计文件):

调用connect连接到一起,当Qt检测到closeButton被按下了,则调用MainWindow中的close方法。

connect(ui->closeBtn,&QPushButton::clicked,this,&MainWindow::close);    //&信号函数地址,接收者,&当前窗口类型

自定义信号槽

要求:

1.信号是类的成员函数

2.返回值是void类型

3.信号的名字可以根据实际情况进行指定

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

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

6.信号函数只需要声明,不需要定义

7.发送信号就相当于调用了信号函数,习惯加emit声明被发送(相当于宏定义)

8.要使用Q_OBJECT宏

自定义槽

1.返回值是void

2.槽也是函数,需要支持重载

3.Qt中槽函数的类型:类的成员函数、全局函数、静态函数、匿名函数

4.槽函数可以使用关键字进行声明:slots(可以省略不写):public slots:,private slots:,protected slots:。其中后两者只能在类的内部使用。

举例

创建一个能让女朋友过生日的按钮,点击之后女朋友就过生日了,然后女朋友发出过生日的信号,我再送礼物。

添加新文件,创建类:

 

 

 创建一个我类,一个女朋友类

女朋友类中的信号——过生日(头文件):

signals:
    void birthday();

 我类送礼物——非信号;

public slots:
    void give();

 在MainWindow头文件添加这两个头文件,并添加成员对象:

 我要执行的是送礼物(别忘了添加qDebug头文件):

void Me::give()
{
    qDebug()<<"我送你一份礼物";

}

点击按钮让女朋友过生日(实际上是点击按钮发送信号让女朋友过生日)——女朋友发送过生日的信号——我送礼物

于是在主函数里,需要将按钮的信号传给女朋友,让女朋友过生日,女朋友过生日再与我送礼物相连。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //创建了对象就要有初始化对象
    m_me=new Me;
    m_girl=new GirlFriend;
    //对象关联,女朋友过生日的信号与我送礼物相连
    connect(m_girl,&GirlFriend::birthday,m_me,&Me::give);   //齐总birthday是自定义的,不能由框架发送,没有此存在,需要自己发射信号
    //关联槽函数,让女朋友过生日的按钮与让女朋友发出信号相连
    connect(ui->birthday,&QPushButton::clicked,this,&MainWindow::birthdaySlot);
    connect(ui->closeBtn,&QPushButton::clicked,this,&MainWindow::close);    //&信号函数地址,接收者,&当前窗口类型
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::birthdaySlot()
{
    //发射信号
    emit m_girl->birthday();
}

 按钮的创建就不说了,名称叫做birthday。

运行,点击生日:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值