Когда пользователь печатает в окне на основе QWidget
, я хотел, чтобы QLineEdit
обработал все клавиши ввода, поэтому я попробовал следующие два решения в keyPressEvent()
этого QWidget
:
A.
void Window::keyPressEvent (QKeyEvent *e)
{
switch (e->key())
{
// handle other short cuts
default:
QApplication::sendEvent (lineEdit , e);
break;
}
}
Ну, иногда это вызывает сбой всего интерфейса, особенно когда я resize window
.
B.
void Window::keyPressEvent (QKeyEvent *e)
{
switch (e->key())
{
// handle other short cuts
default:
if ( ! lineEdit.hasFocus () )
{
lineEdit.setFocus ();
lineEdit.setText (e->key());
// i wanted to push the first key input to that QLineEdit , but how ?
// or i'll miss it
}
break;
}
}
Также я думаю о предоставленииlineEdit
фокусируется все время, но я не могу этого сделать, так как другие события должны обрабатываться главным пользовательским интерфейсом.
Обновление
Не произойдет сбой при фильтрации ключевых входова почему?
default:
if ( e->key() == Qt::Key_Backspace || e->key() == Qt::Key_Delete ||
(e->key() >= Qt::Key_A && e->key() <= Qt::Key_Z )
)
QApplication::sendEvent(filter , e);
break;
}