1. 程式人生 > 其它 >Qt:為QLabel增設點選響應操作

Qt:為QLabel增設點選響應操作

技術標籤: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.效果展示
在這裡插入圖片描述在這裡插入圖片描述