Qt常用知识点

本文深入探讨了Qt中信号与槽机制的实现方式,包括Qt4与Qt5的不同解决方案。详细介绍了如何使用函数指针连接信号与槽,以及Qt4中信号与槽的局限性和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

001 信号重载

【Qt5解决方案】

应该用函数指针去解决这个问题

例如:

QSpinBox 的信号

两种使用函数指针的方式:

 
QSpinBox * spin = new QSpinBox(this);
QSlider * slider = new QSlider(Qt::Horizontal,this);
void (QSpinBox::* testSignal)(int) = &QSpinBox::valueChanged;
connect(spin,testSignal,slider,&QSlider::setValue);

还有一种

QSpinBox * spin = new QSpinBox(this);
QSlider * slider = new QSlider(Qt::Horizontal,this);
connect(spin,static_cast<void (QSpinBox::*)(int)> 
           (&QSpinBox::valueChanged),slider,&QSlider::setValue);

【Qt4解决方案】

编写代码的时候:

会有选项告诉你让你选哪个

connect(spin,SIGNAL(valueChanged(int)),slider,SLOT(setValue(int)));

Qt4也有其局限性

1. 槽函数必须添加约束

public slots:
public slots: // 槽函数====
    void myslot();
    // 槽函数和信号是对应的,因为信号没有返回值,槽函数没有返回值,
    // 信号如果有参数,槽函数就可以有参数
    void changeWin();

2. SIGNAL函数是一种字符串转换函数,假设信号名写错了,例如上面

connect(spin,SIGNAL(valueChd(int)),slider,SLOT(setValue(int)));

这里编译期间并不会报错,只在运行期间报错,告诉我们找不到valueChd


说到信号与槽

信号必须通过关键字声明 

signals:
    //信号必须有这个关键字,来声明
    // 信号没有返回值。,但可以有参数
    // 信号就是函数的声明,只需要声明,不需要定义
    void mySignal();

使用这个信号的时候,是通过

emit mySignal();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值