2017-11-20 18 views
0

Windows上で矢印キーを使用するモードと、これらの矢印キーを完全に無視するモードを持つQTアプリケーションがあります。つまり、ユーザーがボックスをチェックすると、矢印キーでイベントがトリガーされないようにします。QT:チェックボックスの選択でキーイベントを無視する

私はeventFilter()が提案された投稿を見ましたが、私はそれをどのように使うことができませんでした。ここでは、ユーザをリッスンするチェックボックスイベントがあり、ユーザがそれをチェックするとトリガされます。他の部分では、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

私は矢印キーのイベントを処理するクラスと、必要な計算を行い、何が起こるかを決定する別のクラスを持っています。私はすべてが同じクラスにあることを望んでいません。 –

関連する問題