基于字符串的connections与基于函数子的connections比较
前言
5.0版本后的Qt提供了connect
函数的两种写法:基于字符串的connect
(string-based
)和基于函数子(functor-based
)的connect
。由于这两种写法在原理上的差异,他们都有十分明显的优缺点,主要表现在类型检查(type-check
)上。
本文将介绍这这两种写法,并结合示例代码分析在不同情况下,何种写法是更好的。
例子
以这个简单的代码为例
QSlider
的值改变时会发射valueChanged(int)
信号,DoubleSpinBox
的赋值函数是setValue(double)
。因此他们的connect
函数对应的两种写法分别是:
//这么写就是functor-based的connection
connect(ui->slider, &QSlider::valueChanged,
ui->doubleSpinBox, &QDoubleSpinBox::setValue);
//这么写就是string-based的connection
//但在这里,这种写法并不能实现功能
connect(ui->slider, SIGN