2017-11-20 4 views
0

Windows에서 QT 응용 프로그램을 사용하고 있으며 화살표 키를 사용하는 모드와 이러한 화살표 키를 완전히 무시하는 모드가 있습니다. 즉, 사용자가 상자를 체크하면 화살표 키가 어떤 이벤트도 트리거하지 않게하려고합니다.QT : 확인란 선택시 키 이벤트 무시

나는 eventFilter()이 제안 된 게시물을 보았지만 사용법을 알지 못했습니다. 다음은 사용자를 청취하고 사용자가 확인한 후에 트리거되는 체크 박스 이벤트입니다. else 부분에서 eventFilter()이 화살표 키로 작동하기를 원하지만 지금까지는 실행하지 못했습니다.

void MainWindow::on_checkBoxSmartCutMode_stateChanged(int arg1) 
{ 
    if (arg1 == 0) 
    { 
    // do as usual, arrow keys should work 
    } 
    else 
    { 
     eventFilter(); // if any arrow key is pressed, ignore the event 
    } 

} 

의견이 있으십니까?

+0

[여기] 기본 버전이 (https://stackoverflow.com/a/26976984/3484570). 화살표 키를 사용하고 확인란 상태를 확인하기 위해 변경해야합니다. 화살표 키 핸들러에서 직접 if (checkbox.isChecked()) return;를 직접 수행 할 수도 있습니다. – nwp

답변

1

keyEvent을 키 필터로 사용하고 keyPressEvent을 재정 의하여 확인란 상태를 테스트 할 수 있습니다.

예 :

void MainWindow::keyPressEvent(QKeyEvent *event) 
{ 
    // check your checkbox state 
    if (ui->poCheckBox->checkState() == Qt::Unchecked) 
     // do as usual, arrow keys should work 
     return; 

    switch(event->key()) 
    { 
     case Qt::Key_Left: 
     case Qt::Key_Right: // add more cases as needed 
     event->ignore(); // if any arrow key is pressed, ignore the event 
     return; 
    } 

    // handle the event 
} 
+0

이것은 많은 의미가 있습니다. 나는이 대답을 받아 들일 것이다. 또한 핵심 행사를 담당하는 다른 수업에서 어떻게 'ui'에 액세스 할 수 있는지 알려주실 수 있습니까? –

+0

다른 클래스의 UI에 액세스하려는 이유는 무엇입니까? 클래스 간 의사 소통은 Qt signle/slot을 사용합니다. – Simon

+0

화살표 키 이벤트를 처리하는 클래스와 필요한 계산을 수행하고 결과를 결정하는 다른 클래스가 있습니다. 나는 모든 것을 같은 계급에 있기를 원하지 않는다. –