點擊藍字 關注我們
上一篇文章介紹QTabWidget的使用技巧。本文開始介紹Qt最常用的事件之一QMouseEvent。
滑鼠事件是Qt中十分重要的人機互動形式。滑鼠事件包括很多內容,此處先介紹最基本的mousePressEvent事件函數。如前期文章所示,Qt中的大部分事件函數都已經提供了函數接口,我們只需要在具體項目類中對這些事件函數進行具體實現即可。
打開Qt的widget幫助文檔,可以找到mousePressEvent的函數定義如下所示:
mousePressEvent是一個虛函數,通過在子類之中對其進行實現來關聯具體的滑鼠動作。第一步需要在mainWindow中定義一個mousePressEvent(QMouseEvent *event),注意虛函數的形參類型不能修改,只能是QMouseEvent *,函數定義時後面加上override表示對虛函數進行重新實現。
Cpp之中對mousePressEvent進行實現。
void mainWindow::mousePressEvent(QMouseEvent *event){ return QMainWindow::mousePressEvent(event); }在事件之中添加一個簡單的列印輸出,event事件對象,此處輸出滑鼠在界面的位置pos(),pos函數給出的是窗口坐標系下的位置而不是桌面坐標下的位置,此函數是比較重要的滑鼠事件函數,用於定位滑鼠位置:
qDebug()<<"mouse clicked "<<event->pos();編譯運行代碼,在界面隨便點擊滑鼠,不論是點擊左中右鍵都會輸出一條信息:
如果我們只希望捕獲滑鼠左鍵點擊事件,那麼在事件處理函數中使用如下的代碼過濾掉其他滑鼠鍵輸入。button()函數輸出滑鼠點擊的鍵值。此時再點擊滑鼠右鍵或者中鍵不會有反應。
if(event->button()==Qt::LeftButton){ qDebug()<<"mouse clicked "<<event->pos();}下面給滑鼠動作加一些複雜的動作,我們先在ui的tab_2添加一個居中的tableWidget,命名為mouseControlTable:
此時table是一個空的表格,我們先給表格添加兩列:
下面通過數表動作來動態為表格修改行數,假設點擊滑鼠左鍵我們為表格增加一行,點擊滑鼠右鍵為表格刪除一行。
void mainWindow::mousePressEvent(QMouseEvent *event){ int tableRowCount = ui->mouseControlTable->rowCount(); if(event->button()==Qt::LeftButton) { ui->mouseControlTable->insertRow(tableRowCount); } if(event->button()==Qt::RightButton) { if(tableRowCount) ui->mouseControlTable->setRowCount(tableRowCount-1); } return QMainWindow::mousePressEvent(event); }此時在界面上如果點擊左鍵,表格會動態增加一行,如果點擊右鍵,表格會動態減少一行。不過有心的您會發現,當您點擊表格區域時,什麼動作都不會發生。那是因為QTableWidget本身就有自己的mouseEvent虛函數,我們並沒有對其進行定義。為了實現在表格上點擊滑鼠操作(如複製粘貼等動作),我們需要對表格類QTableWidget進行繼承開發新類,並書寫mouseEvent方法,然後將ui中拉入QTableWidget控制項提升為自己開發的新類型。這些將在下一篇帖子進行介紹。
鄭重承諾:本公眾號所有文章都是以技術交流為目的,均為原創,不主動向閱讀者收取任何費用,不以任何手段盈利。希望讀者們能夠多多反饋您的寶貴意見和問題,以幫助我們優化後期文章,共同進步,感謝您的閱讀~