У меня есть класс, наследующий QWizard, и добавьте 2 независимых QWizardPage (s). Прежде чем перейти к следующей странице, я хочу выполнить определенную работу (например, проверить подключение к Интернету) на первой странице. Пользователь может нажать кнопку «Далее» с помощью мыши или прямо нажать клавишу ввода/возврата с клавиатуры, так как кнопка «Далее» сфокусирована по умолчанию. Поэтому я устанавливаю eventfilter для кнопки:В QWizard следующая кнопка не может принять событие нажатия клавиши, но принимает событие нажатия мыши?
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);
}
Как я много раз пытался, щелкая мышью всегда может сделать мои обработки событий код запуска, но нажатие клавиши не делает ничего, чтобы сделать. Еще одна интересная вещь: нажимать кнопку мыши на кнопке, не отпуская, затем отходить и отпускать, мастер остается на первой странице, теперь я могу нажать клавишу, и все в порядке.
Может ли кто-нибудь помочь найти причину, является ли ошибка Qt? как я могу заставить ключевое событие работать правильно?
Вы попробовали это без условия if (keyEvent-> key() == Qt :: Key_Return || keyEvent-> key() == Qt :: Key_Enter) – ScarCode
Я пробовал, но даже эту строку «QKeyEvent * keyEvent = static_cast (событие); " не может быть достигнуто. –
Royt