9

TabQt がフォーカスを切り替えるのを防ぐために、メイン ウィンドウでキーの押下をインターセプトしたいと考えています。これが私がこれまでに試したことです:

bool CMainWindow::event(QEvent * e)
{
    if (e && e->type() == QEvent::KeyPress)
    {
        QKeyEvent * keyEvent = dynamic_cast<QKeyEvent*>(e);
        if (keyEvent && keyEvent->key() == Qt::Key_Tab)
            return true;
    }
    return QMainWindow::event(e);
}

これは機能しません。eventを押しても呼び出されませんTab。私が望むものを達成する方法は?

4

4 に答える 4

13

フォーカスの変更を回避するために私が見つけた最も洗練された方法は、QWidget から派生したクラスでメソッドを再実装し、bool focusNextPrevChild(bool next)単純に を返すことFALSEです。許可したい場合は、 を返しTRUEます。

他のキーと同様に、キーインも入手できQt::Key_TabますkeyPressEvent(QKeyEvent* event)

于 2014-01-25T14:15:26.003 に答える
3

私の質問からコードを再実装virtual bool QApplication::notify(QObject * receiver, QEvent * e)して貼り付けるとうまくいきます。

于 2013-08-10T12:42:55.303 に答える
-1

イベントを受信するには、メイン ウィンドウにイベント フィルタをインストールする必要があります。これにはinstallEventFilterメソッドを使用できます。もう 1 つのオプションは、キーの押下を処理するようにkeyPressEventメソッドをオーバーライドすることです。

于 2013-08-10T11:21:04.660 に答える