2013-11-21 111 views
1

現在我可以檢測到只有一個按鈕被點擊。但是我想要檢測兩者是否被壓在一起。目的是從QTableView中選擇一些項目。我試圖以這樣一種方式選擇它們,當左鍵單擊某個項目時,右鍵已經保持按下,則該項目將在選中狀態。如何檢測兩個鼠標按鈕是否在Qt中按下?

以下代碼僅顯示單擊右鍵的消息,但未顯示兩個按鈕均已單擊。我如何設法檢測它們何時被點擊?

bool MainWindow::eventFilter(QObject* obj, QEvent *ev) 
{ 
    if(obj = ui->listOfImages->viewport()) 
    { 
     QMouseEvent * mouseEv = static_cast<QMouseEvent*>(ev); 
     if(mouseEv->buttons() == Qt::RightButton) 
     { 
      qDebug()<<"Right Button clicked!"; 
      if(mouseEv->buttons() == Qt::LeftButton) 
      { 
       qDebug()<<"Both button clicked!"; 
       return QObject::eventFilter(obj,ev); 
      } 
     } 
    } 
    return QObject::eventFilter(obj,ev); 
} 

謝謝。

回答

6

QMouseEvent :: buttons()函數返回鼠標按鈕的OR'd狀態的組合。 因此,要測試左鍵被按下時,你應該這樣做: -

if(mouseEv->buttons() & Qt::LeftButton) 

和右邊的按鈕: -

if(mouseEv->buttons() & Qt::RightButton) 

由於Qt的文檔狀態: -

對於鼠標按下和雙擊事件,這包括導致事件的按鈕。對於鼠標釋放事件,這排除了導致該事件的按鈕。

因此,您可以跟蹤按鈕何時按下並釋放。

+1

謝謝,它的工作原理。我會接受你的,因爲你是最早的。 :) –

7

嘗試

if((mouseEv->buttons() & Qt::RightButton) && 
    (mouseEv->buttons() & Qt::LeftButton)) 
{ 
... 
} 

提示:

當你剛檢查按鈕()等於Qt的:: RightButton,怎麼會等於Qt的:: LeftButton?

+0

謝謝,它的作品。對不起,我不能接受你的,因爲梅林是最早的。 :(但我已經投票給你,你們很棒:)。 –

相關問題