У всех элементов виртуальной клавиатуры (кнопки или еще там чего ) нужно выставить focusPolicy в NoFocus.
+ в наследнике от контекста ввода заменить
if (!w) return;
int key = 0;
if(character == QChar(QLatin1Char(8))) key = Qt::Key_Backspace;
else key = character.unicode();
QKeyEvent keyPress(QEvent::KeyPress, key, Qt::NoModifier, QString(character));
QApplication::sendEvent(w, &keyPress);
if (!w) return;
QKeyEvent keyRelease(QEvent::KeyPress, key, Qt::NoModifier, QString());
QApplication::sendEvent(w, &keyRelease);
на
if (!w) return;
int key = 0;
if(character == QChar(QLatin1Char(8))) key = Qt::Key_Backspace;
else key = character.unicode();
QKeyEvent keyPress(QEvent::KeyPress, key, Qt::NoModifier, QString(character));
QApplication::sendEvent(w, &keyPress);
if (!w) return;
QKeyEvent keyRelease(QEvent::KeyRelease, key, Qt::NoModifier, QString());
QApplication::sendEvent(w, &keyRelease);
(если исходники взяты из примера. функция void InputPanelContext::sendCharacter(QChar character))