2013-11-21 4 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 상태의 조합을 반환합니다. 따라서, 당신이 일을해야, 왼쪽 버튼을 누르면 테스트 : - : Qt는 워드 프로세서 상태로

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

: - -

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

오른쪽 버튼

마우스 누르기 및 두 번 클릭 이벤트의 경우 이벤트를 발생시키는 버튼이 포함됩니다. 마우스 릴리즈 이벤트의 경우 이벤트를 발생시키는 버튼을 제외합니다.

언제 버튼을 누르고 놓았는지 추적 할 수 있습니다.

+1

감사합니다. 작동합니다. 네가 가장 이른 걸로 너를 받아 들일거야. :) –

7

시도

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

힌트 : 당신은 그냥 버튼 (체크

가) RightButton :: Qt는 동일, 어떻게 Qt는 :: LeftButton 동일 될 수 있을까?

+0

감사합니다. 작동합니다. 미안하지만, 멀린이 제일 빠르기 때문에 너를 받아 들일 수 없어. :(하지만 너를 투표 해, 너희들은 대단하다. :) –

관련 문제