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...});

 

posted @ 2021-03-24 18:14  Qt王二狗  阅读(559)  评论(0编辑  收藏  举报