Qt:為QLabel增設點選響應操作
阿新 • • 發佈:2021-01-23
技術標籤:Qt
QLabel是沒有clicked()訊號的,所以要建立選中QLabel的響應操作,得做一些處理。
1.為目標物件QLabel新增事件過濾器(EventFilter)
void QObject::installEventFilter(QObject *filterObj)
label->installEventFilter(this);
事件過濾器是接收發送到此物件的所有事件的物件。即上述程式碼中即傳送到label的所有事件都會被this表示的物件所接收。
篩選器可以停止事件或將其轉發到此物件。事件過濾器filterObj通過eventFilter()函式接收事件。如果要過濾事件(即停止),eventFilter()函式必須返回true,即在此後不會接收任何事件;否則必須返回false。
如果在單個物件上安裝了多個事件過濾器,則首先啟用最後安裝的過濾器。
2.編輯事件過濾器,捕抓滑鼠點選事件
bool QtUIConfig::eventFilter(QObject *obj, QEvent *event)
{
//若事件過濾器接收的物件是label,且事件是滑鼠釋放(捕抓該事件)
if (qobject_cast<QLabel*>(obj) == label && event->type() == QEvent::MouseButtonRelease)
{
if (label.second == false)//表示沒有高亮
{
label >setStyleSheet("QLabel{border-color:rgb(0,205,0);}");//label邊框設定為綠色
}
else
{
label ->setStyleSheet("");//恢復原色
label.second = false;
}
return true;
}
}
//return QMainWindow::eventFilter(obj, event);// pass the event on to the parent class
return false ;
}
需要注意的是,如果在eventFilter內刪除了接收物件(如上述的label),則需要返回true,以防止事件傳送到被刪除的物件,導致程式崩潰。
3.效果展示