2010-02-04 6 views
9

Qt에서 모든 마우스 및 키보드 이벤트를 무시하고 나중에 무시하는 방법은 무엇입니까? 그것은 : 버튼을 클릭하고, 아이들의 모든 사건을 무시합니다; 무시하지 말고 다시 클릭하십시오. 분명하니? 나는 다음과 같은 라인을 가지고 있지만 어쩌면 내가 뭔가 잘못하고 있어요 :Qt에서 마우스 및 키보드 이벤트를 무시합니다.

setAttribute(Qt::WA_TransparentForMouseEvents); 

setFocusPolicy(Qt::NoFocus); 
+0

참고 :'setAttribute (Qt :: WA_TransparentForMouseEvents);'- 마우스 이벤트에 대해 위젯을 투명하게 만듭니다. 'setEnabled (false);'- 위젯이 마우스와 키보드 이벤트를 무시하도록합니다. – mlvljr

답변

3

당신은 사용할 수 있습니다

QWidget::setEnabled(false) 

는 위젯을위한 마우스와 키보드 이벤트를 해제합니다.

8

당신이 그렇게 필요로 할 때 당신은 어떤 키를 누를 필터링하거나 마우스 클릭하는 마우스와 키보드 이벤트를 이벤트 '필터를 사용할 수 있습니다 이것에

yourWidget->installEventFilter(this); 

...

bool YourFrm::eventFilter(QObject* pObject, QEvent* pEvent) 
{ 
    if (pEvent->type() == QEvent::KeyPress) 
    { 
     QKeyEvent* pKeyEvent = static_cast<QKeyEvent*>(pEvent); 
     int PressedKey = pKeyEvent->key(); 

     if(PressedKey == Qt::Key_Return) 
     { 
      // Filter Return key.... 
      return true; 
     } 

     // standard event processing 
     return QObject::eventFilter(pObject, pEvent); 
    } 
    else if (pEvent->type() == QEvent::MouseButtonPress) 
    { 
     QMouseEvent* pMouseEvent = static_cast<QMouseEvent*>(pEvent); 

     ... // etc... 
    } 
    else 
    { 
     // standard event processing 
     return QObject::eventFilter(pObject, pEvent); 
    } 
} 

더 많은 정보를 : http://qt.nokia.com/doc/4.6/eventsandfilters.html

희망 하시겠습니까?

4

QGraphicsItem을 원하십니까?

그래, 당신이

void QGraphicsItem::setEnabled (bool enabled) 

를 호출 할 수 있습니다 그리고 항목이 더 이상 이벤트를 수신하지 않는 직접 수신 할 수 있기 때문에, 당신은 장면에 의해 통과해야, 나중에 이벤트를 활성화 할 경우 이벤트 항목.
당신이 호출 할 수 있습니다 : 문제가 GraphicsView 프레임 워크,하지만 QT의 다른 부분을 사용하지 않는 경우
, 그것은 거의 같은 프로세스의

QWidget::setEnabled(false) //like Massimo said 

그냥 객체 내부의 프레스 이벤트를 감지, 위젯을 재 활성화하기 위해서 귀하의 응용 프로그램에서 귀하의 위젯에`setEnable (true)를 호출 할 수 있습니다!

희망 하시겠습니까? `

8

사용 안 함 setFocusPolicy (Qt :: NoFocus); 이벤트는 부모에게 전달됩니다. setAttribute (Qt :: WA_TransparentForMouseEvents) 만 사용하십시오.

+0

예! 이것은 내 QTableView에서 키보드 탐색 컨트롤 만 사용하고 싶었습니다. – TheGerm

관련 문제