Qt 信号与槽

        信号和槽用于两个对象之间的通信。信号和槽机制是Qt的核心特征,也是Qt不同于其他开发框架的最突出特征。为了实现对象间的通信,一些工具包中使用了回调机制,而在Qt中使用了信号和槽来进行对象间的通信。当一个特殊的事情发生时便可以发射一个信号,比如按钮被点击就发射clicked()信号;而槽就是一个函数,它在信号发射后被调用来响应这个信号。Qt的部件类中已经定义了一些信号和槽,但是更常用的做法是子类化部件,然后添加自定义信号和槽来实现想要的功能。

        一个信号可以关联到多个槽上,多个信号也可以关联到同一个槽上,甚至,一个信号还可以关联到另一个信号上。如果存在多个槽与某个信号相关联,那么当这个信号被发射时,这些槽将会一个接一个地执行,执行顺序与关联顺序相同

        在声明一个信号要使用signals关键字,在signals前面不能用public、private和protected等限定符,因为信号默认是public函数

        信号只用声明,不需要也不能对它进行定义实现,而且信号没有返回值,只能是void类型的。

        只有QObject类及其子类派生的类才能使用信号和槽机制,以下面代码为例,使用信号和槽还必须在类声明的最开始处添加Q_OBJECT宏,不过这个一般在创建的Qt的类中会自动生成。

        槽就是普通的C++函数,可以像一般的函数一样使用。声明槽要使用slots关键字,槽可以是private、public或者protected类型的,槽也可以被声明为虚函数。槽的最大特点就是可以和信号关联。

#include <QDialog>

QT_BEGIN_NAMESPACE
namespace Ui { class My_Dialog; }
QT_END_NAMESPACE

class My_Dialog : public QDialog
{
    Q_OBJECT    //一般创建Qt类时会自动生成

public:
    My_Dialog(QWidget *parent = nullptr);
    ~My_Dialog();

signals:
    void Mysignal();    //声明一个信号,无返回值,不需要实现信号函数


public slots:
    void Myslot();  //声明一个公有的、无返回值的槽函数    
    QString MyFunc();   //声明一个共有的、返回值为QString类型的槽函数

private:
    Ui::My_Dialog *ui;
};

总结使用信号和槽需要注意以下几点:

        1、需要继承自QObject或其子类;

        2、在类声明的最开始处添加Q_OBJECT宏;

        3、槽中参数的类型要和信号参数的类型相对应,且不能比信号的参数多;

        4、信号只用声明,没有定义,且返回值为void类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

空腹可以吃早餐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值