2012-03-04 17 views
1

キーボードイベントを処理するためにQt 4のイベントフィルタが必要なことは知っています。しかし私はこれまで手動でこれを設定する必要はなく、これまで同様の作業を行っていました。私はそれのためのドキュメントを読んだが、私はアプリケーションのためのイベントの儀式のセットアップを得ることができませんでした。ボタンレベルで管理されるイベントは必要ありません。キーボードイベントでボタン間を移動する

ここでは、マウスクリック以外の場合にフォーカスまたはアクティブにならない2つのボタンを示すコード例を示します。私はbutton.setFocus()で行うことができる1つのボタンにデフォルトで焦点を当てたいと思います。私はまた、タブを使用してアクティブなボタン、または上/下のキーを入力して/スペースでアクティブにすることができるようにナビゲートすることができるようにしたいと思います。問題は、それを実装する方法が混乱していることです。 Q *クラスを継承してイベントフィルタクラスを実装し、オブジェクトにインストールする必要がありますか?それとも簡単な方法がありますか?

#include <QApplication> 
#include <QPushButton> 
#include <QWidget> 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    QWidget window; 
    window.resize(200, 200); 

    QPushButton quit("Quit", &window); 
    quit.setGeometry(10, 40, 180, 40); 
    QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit())); 

    QPushButton nothing("Do Nothing", &window); 
    nothing.setGeometry(10, 80, 180, 40); 

    quit.setFocus(); 
    window.show(); 
    return app.exec(); 
} 
+0

メインウィンドウでkeyPressEventを定義するだけですか? – jdi

+0

@jdiどうすればよいか分かりません。 –

+0

私はosx設定であなたの問題をすでに解決していることを知っていますが、これを読んでもっと深いイベントを理解することができます:http://doc.qt.nokia.com/qq/qq11-events.html – jdi

答えて

1

タブまたはカーソルキー、this is the default behaviorを使用してボタン間をナビゲートするために何もする必要はありません。

+0

ええと、私が投稿したサンプルコードはこれと矛盾しているようです。 Enter、スペース、タブなどは何もしません。たとえ手動でボタンにフォーカスを合わせても。クリックだけが機能します。 –

+0

申し訳ありませんが、私が掲示したコード例では、スペースバーが終了ボタンを「クリック」させるsetFocusを実装していますが、それ以外の場合、キーボードイベントは何も行いません。 –

+0

私はあなたのコードをコンパイルして実行し、タブキーとカーソルキーで2つのボタンの間をナビゲートすることができました。私はスペースバーでボタンをアクティブにすることができます。 'quit.setDefault(true)'を追加すると、そのボタンをEnterキーでアクティブにすることができます。これは、Windows 7/MinGW/Qt 4.8にあります。 –

0

QWiget::focusPolicyを参照して、ウィジェットのフォーカスを防止してください。

+0

私は ' window.setFocusPolicy(Qt :: StrongFocus); 'はすでに動作しており、動作は変更されません。 –

関連する問題