Qt信号槽-连接方式
Qt信号槽分传统方式和新方式两种。
传统的连接方式通过SIGNAL()和SLOT()来使用,如下所示:
connect(comboBox, SIGNAL(currentTextChange(const QString&)), this, SLOT(textChange(const QString&)));
Qt5之后出了很多新的连接方式,如下所示:
connect(timer, &QTimer::timeout, this, &Widget::timeoutUpdate);
在这种方式下,我们不必再通过诸如SIGNAL关键字来修饰,直接传递函数地址即可。另外,槽函数也不必再用slots关键字来声明(当然为了维护性,最好还是修饰下)
除此之外,qt5还支持lambda用法,比如上面的信号槽连接可以用lambda写:
connect(timer, &QTimer::timerout, this, [this]{
//doSomething....});
lambda看着好看,如果遇上有重载版本的信号又该这怎么写呢?比如QComboBox的 currentTextChanged(int)信号
connect(comboBox, static_cast<void (QComboBox:: *)(int index)>(&QComboBox::currentIndextChanged), [=](int index){
//doSomething...});