QWizardを継承するクラスがあり、2つの独立したQWizardPageを追加します。次のページに進む前に、最初のページでいくつかの作業(つまり、インターネット接続の確認)を行いたいと思います。ユーザーは、マウスで「次へ」ボタンをクリックするか、「次へ」ボタンがデフォルトでフォーカスされているため、キーボードで直接Enter/Returnを押すことができます。そこで、ボタンのイベントフィルターをインストールします。
button(QWizard :: NextButton)-> installEventFilter(this);
次に、ウィザードクラスで、イベント処理コードを実装します。
bool MyWizard::eventFilter(QObject *watched, QEvent *event)
{
if (watched == button(QWizard::NextButton))
{
if (currentId() == startPageId)
{
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if (keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Enter)
{
// Do something. Cannot be reached.
}
}
else if (event->type() == QEvent::MouseButtonPress)
{
// Do something. Can be reached.
}
}
}
return QWizard::eventFilter(watched, event);
}
何度も試したように、マウスをクリックすると常にイベント処理コードが実行されますが、キーを押しても何も起こりません。もう1つの興味深い点は、ボタンを離さずにマウスを押してから、離れて離すと、ウィザードが最初のページに留まるので、キーを押すことができ、すべてOKです。
誰かが理由を見つけるのを手伝ってくれるでしょうか、それはQtのバグですか?キーイベントを正しく機能させるにはどうすればよいですか?