qt自定义信号和槽

在实际使用时,我们会遇上qt的信号和槽函数的参数类型和个数无法妈祖实际使用时的场景;

未接决此问题,最简单有效的是建设需要的信号函数和槽函数。

1.自定义信号函数

信号函数指的是符合以下条件的函数:

定义在某个类中,该类直接或间接继承自 QObject 类;用 signals 关键字修饰;函数只需要声明,不需要定义(实现);函数的返回值类型为 void,参数的类型和个数不限。

class MyWidget:public QWidget{
Q_OBJECT
signals:
void MySignal(Qstring message);
};

是继承自QWidget的MyWidget类,QWidget 是 QObject 的子类,所以 MyWidget 间接继承自 QObject 类。然后MyWidget 类中自定义了名为MySignal 的信号函数(可以简称 MySignal 信号),它用 signals 关键字修饰,没有返回值,也没有定义(实现),仅有1个参数。对于MySignal信号函数,并不会直接调用它,而是要用connect()去连接某个槽函数

QObject::connect(&myWidget,&MyWidget::MySignal,信号接收者,槽函数);

一旦信号发出,与之确认的槽函数也会确认;而emit是用来调整信号发出时机的关键字。

class MyWidget:public QWidget{
Q_OBJECT
signals:
void MySignal(Qstring message);
public:
void emitSignal(){

emit MySignal(message);

}

private:
QString message;
};

当执行emitSignal()时会发射MySignal信号,message的值也会发射并使槽函数接收、

2.自定义槽

和信号函数不同,槽函数必须手动定义(实现)。槽函数可以在程序中直接调用,但主要用来响应某个信号。自定义一个槽函数时,需要注意以下几点:

槽函数的返回值必须和信号函数相同,由于信号函数的返回值一定是 void,所以槽函数的返回值也必须为 void;

对于带参的信号函数,槽函数可以选择接收所有参数,则参数的类型、顺序、个数都必须与信号函数相同;也可以选择接收前几个参数,这些参数的类型、顺序都必须与信号函数相同;还可以选择不接受任何参数。

槽函数的参数个数只能比信号函数少,不能比信号函数多;

槽函数的参数不能有默认值。

slots 关键字可以和 public、protected、private 搭配使用,它们的区别是:

public slots:该关键字修饰的槽函数,既可以在当前类及其子类的成员函数中调用,也可以在类外部的其它函数(比如 main()函数)中调用;

protected slots:该关键字修饰的槽函数,仅允许在当前类及其子类的成员函数内调用,不能在类外部的其它函数内调用;

private slots:该关键字修饰的槽函数,只允许在当前类的成员函数内调用,不能在子类中调用,也不能在类外部的其它函数内调用。

通常情况下,槽函数使用 public slots 修饰。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值