QT QPushButton點選事件的實現
阿新 • • 發佈:2019-01-28
最近需要對按鈕實現效果:當滑鼠按下時按鈕有效果1,然後滑鼠鬆開時按鈕有效果2。
分析:這裡沒有現成的訊號可以使用,需要過載mousePressEvent 及 mouseReleaseEvent 事件函式,在mouseReleaseEvent 函式中檢查滑鼠是否在按鈕中,若是,則傳送點選事件。以下為版本一實現:
這樣造輪子顯然是不高效的,並且程式碼也比較醜陋,QPushButton繼承自QAbstractButton,在QAbstractButton中有更好的mousePressEvent 及 mouseReleaseEvent 實現,可以發現滑鼠點選事件的原理跟版本一是類似的。以下為版本二的實現:void testbutton::mousePressEvent(QMouseEvent *e) { //效果1實現程式碼 } void testbutton::mouseReleaseEvent(QMouseEvent *e) { //效果2實現程式碼 //滑鼠釋放時如果仍在按鈕內部,傳送click訊號,注意這裡e->pos返回的是相對於按鈕起始位置的位置 if (this->bIsPointInRect(e->pos(), QRect(0, 0, this->width(), this->height()))) { emit clicked(); } }
void testbutton::mousePressEvent(QMouseEvent *e) { QPushButton::mousePressEvent(e); if (e->isAccepted()) { //效果1實現程式碼 } } void testbutton::mouseReleaseEvent(QMouseEvent *e) { QPushButton::mouseReleaseEvent(e); if (e->isAccepted()) { //效果2實現程式碼 } }