我正在创建一个 Qt Widgets 应用程序并将其部署在 Windows 11 平板电脑上。
目前,当我单击 QLineEdit 时,会出现 Windows 11 集成虚拟键盘,我可以编辑文本。但是,当它是 QSpinBox 时,键盘不会出现。
我的应用程序必须处于全屏状态,并且不允许访问任务栏中的虚拟键盘快捷键:
我已经尝试过:
QProxyStyle 到 QSpinBox
重新实现一些 QEvent 功能以强制使用
QEvent e(QEvent::RequestSoftwareInputPanel);
进行调用
bool event(QEvent *event) override
{
if (QEvent::InputMethodQuery == event->type())
{
QEvent e(QEvent::RequestSoftwareInputPanel);
return QApplication::sendEvent(qApp, &e);
}
return QSpinBox::event(event);
}
Q输入法
setInputMethodHints(Qt::ImhDigitsOnly);
阅读QLineEdit源代码。
这是我实现此功能的演示:
点击QLineEdit调用虚拟键盘:
单击 QSpinbox 不会调用任何内容。
Qt版本是6.5.0。
在我看来,这是一个 Qt 错误。通过官方 Qt Bug Report 系统报告可能是合适的。
作为解决方法,我会尝试以下方法:
void focusInEvent(QFocusEvent *event) override
{
QSpinBox::focusInEvent(event);
QGuiApplication::instance()->inputMethod()->show();
}
请注意,我尚未测试此方法,因为我手头没有 Windows 11 平板电脑。