Qt5中信号与槽新语法

Qt5中引入了一种新的信号与槽的语法,旧的语法仍然可用。


如果我们将一个QSlider对象的valueChanged信号链接到一个QSpinBox对象的setValue槽,使用传统方式:

connect(slider, SIGNAL(valueChanged(int)), spinbox, SLOT(setValue(int)));
而使用新语法:

connect(slider, &QSlider::valueChanged, spinbox, &QSpinBox::setValue);


使用新语法的优点:

  1. 编译期:检查信号与槽是否存在,参数类型检查,Q_OBJECT是否存在
  2. 信号可以和普通的函数、类的普通成员函数、lambda函数连接(而不再局限于信号函数和槽函数)
  3. 参数可以是 typedef 的或使用不同的namespace specifier
  4. 可以允许一些自动的类型转换(即信号和槽参数类型不必完全匹配)


新语法中,信号与槽都是函数指针。但是,如果信号或者槽的函数有重载函数,那么就不能直接用函数名了,可以声明一个函数指针,用来区分到底是重载函数中的哪一个。

void (QSlider::*valueChangeInt)(int) = &QSlider::valueChanged;
connect(slider, valueChangedInt, spinbox, &QSpinBox::setValue);

也可以把这两行写在一起:

connect(slider,
        static_cast<void (QSlider:: *)(int)>(&QSlider::valueChanged),
        spinbox,
        &QSpinBox::setValue);

实际上就是一个函数指针类型的转化。


关于信号与槽新语法的详细介绍可以看这里:Qt 学习之路 2(16):深入 Qt5 信号槽新语法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值