Qt中槽函数触发两次的两种场景分析
??? 在Qt開發中,有兩種情況能夠觸發槽函數被觸發兩次,第一種情況是必現的,屬于錯誤的寫法,是指信號和槽關聯兩次;第二種情況是偶然出現的,是指對信號沒有正確理解導致的。
1.信號與槽關聯兩次
??? 通常這種情況下發生在混合編程的情況下,即既使用了UI來進行布局,又使用來代碼來關聯信號,使得信號和槽關聯兩次。不妨以QPushButton中的button為例,通常在使用ui文件布局中自動生成的文件中會調用這樣一句話:
QMetaObject::connectSlotsByName();這樣則代表隱式調用connect(button, &QPushButton::clicked, this, &myWidget::on_button_clicked);此時開發者只需要實現on_button_clicked即可,如果再在代碼中顯示添加信號和槽連接,則會觸發槽函數兩次
?
2.QPushButton中的pressed,released, clicked信號
??? 通常這種情況發生在對信號的關聯上,以QPushbutton為例,其他的如果有類似情況可以延伸,首先復現這種場景需要正確理解QPushButton中的三種信號:pressed指的是鼠標左鍵按下的動作,released指的是鼠標左鍵抬起的動作,clicked指的是鼠標左鍵按下并抬起的動作,因此觸發優先級為pressed>released>clicked.
?? 考慮場景,關聯pressed信號,測試鼠標快速點擊button,點擊button關閉對話框并打印進入對話框的次數,測試發現:在多次嘗試后,會出現概率性的一次點擊,進入兩次對話框的情況,但是關聯clicked信號卻不會出現這種情況。
? 避免情況:因此,如果不需要區分三種信號觸發的優先級,建議在開發過程中盡量使用clicked信號。
總結
以上是生活随笔為你收集整理的Qt中槽函数触发两次的两种场景分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 赛莉亚的祝福
- 下一篇: 乘法口诀表的C语言编程