QTウィンドウの1つにがQTabWidget
あり、左/右のキー押下イベントを飲み込んでいるようです。メインウィンドウには、次の機能があります。
void VisionWindow::keyPressEvent(QKeyEvent* event) {
std::cout << event->key() << "\n";
}
左または右以外のキーを押すと、ハンドラーがオフになり、キーコードがコンソールに出力されます。左または右を押すと、タブウィジェットの次の左(または右)タブに移動し、VisionWindow
のkeyPressEvent
メソッドは起動しません。
イベントを無視するサブクラスでこれを修正しようとしました:
class KeylessTabWidget : public QTabWidget {
public:
KeylessTabWidget(QWidget* parent) : QTabWidget(parent) {}
void keyPressEvent(QKeyEvent* event) { event->ignore(); std::cout << "ignored an event\n"; }
};
メインウィンドウと同様に、これは左または右以外のキーが押された場合にのみ呼び出されます。また、フォーカスの場所に基づいて、左または右を押すと、チェックボックスなど、メインウィンドウの別のウィジェットにフォーカスが切り替わることがあります。左キーと右キーを再利用する方法がある場合、またはこれらがデフォルトでQTで広く使用されていることを受け入れて、別のものに切り替える必要がありますか?
アップデート:
結局、ウィンドウコンストラクターで#include <QApplication>
一緒に使用することになりました。qApp->installEventFilter(this);
欠点は、タブウィジェットがまだタブを切り替えていることです。これはLinuxの問題のようです。プラス面として、私はすべての重要なイベントをキャプチャすることができます。他のキーの子ウィジェットにもイベントが飲み込まれていたのですが、これで解決しました。