QPushButton 点击信号分析
QPushButton 點(diǎn)擊信號(hào)分析
QPushButton有三個(gè)很重要的信號(hào)跟點(diǎn)擊有關(guān)
pressed
clicked
toggled
表面上看,pressed和clicked都會(huì)在點(diǎn)擊按鈕時(shí)觸發(fā),它們有什么區(qū)別呢?toggled好像有時(shí)候觸發(fā),有時(shí)候不觸發(fā),到底怎么回事呢?下面就一起聊一下這三個(gè)信號(hào)
首先,這三個(gè)信號(hào)都是從QAbstractButton繼承來的,也就是說,下面情況對(duì)QAbstractButton的所有子類都適用,
先來看第一個(gè)問題
pressed和clicked,可以編寫一段代碼來測(cè)試一下
運(yùn)行后點(diǎn)擊按鈕,結(jié)果為
Debugging starts
pressed
clicked
pressed
clicked
pressed
clicked
也就是說pressed先觸發(fā)(按下),clicked后觸發(fā)(彈起),而且如果將鼠標(biāo)按壓按鈕,按住不動(dòng)會(huì)發(fā)現(xiàn)只輸出了“pressed”,直到放手彈起按鈕,才會(huì)輸出“clicked”
另外,如果在pressed 對(duì)應(yīng)的槽函數(shù)中打斷點(diǎn),會(huì)發(fā)現(xiàn)斷點(diǎn)運(yùn)行后并不會(huì)執(zhí)行“clicked”,這種情況跟我們?cè)谑髽?biāo)按下事件和鼠標(biāo)彈起事件中同時(shí)打斷點(diǎn)的情況一樣,調(diào)試按下觸發(fā)的代碼后,彈起的事件代碼不會(huì)觸發(fā)。
再來看第二個(gè)問題
幫助文檔里面寫著按鈕狀態(tài)變化的時(shí)候,這個(gè)信號(hào)會(huì)觸發(fā),所以這個(gè)信號(hào)觸發(fā)的前提是按鈕的Checkable屬性要設(shè)置成true,這樣在點(diǎn)擊按鈕之后就會(huì)觸發(fā)toggled信號(hào)
測(cè)試代碼如下:
QObject::connect( ui->pushButton,&QToolButton::toggled,[](bool b){qDebug()<<"toggled"<<b; });ui->pushButton->setCheckable(true);
那么還有一個(gè)問題 pressed和clicked,和toggled 的先后順序又是怎樣的,我們將兩段測(cè)試代碼同時(shí)添加,運(yùn)行之后點(diǎn)擊按鈕,結(jié)果:
Debugging starts
pressed
toggled true
clicked
pressed
toggled false
clicked
pressed
toggled true
clicked
…
結(jié)論:
- pressed最先執(zhí)行,相當(dāng)于按下操作
- 按下之后,按鈕狀態(tài)發(fā)生變化,觸發(fā)toggled
- clicked最后執(zhí)行,相當(dāng)于彈起操作
作者:伐羅密
鏈接:https://www.jianshu.com/p/2c4e35a6ed72
來源:簡(jiǎn)書
總結(jié)
以上是生活随笔為你收集整理的QPushButton 点击信号分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QML编程之旅 -- 元素布局
- 下一篇: QML编程之旅 -- 事件处理