QT+arm使用默认输入法出现一闪而过的情况

我写了一个QT程序,我使用QT自带的虚拟键盘,qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));但是我一点击输入框,键盘一闪就不见了。
我运行我写的程序的时候会报错:qt.qpa.wayland: qtvirtualkeyboard currently is not supported at client-side, use QT_IM_MODULE=qtvirtualkeyboard at compositor-side.,我还配置过QT_IM_MODULE=qtvirtualkeyboard也没用,我的arm qt环境是:qt5virtualkeyboard-5.15.2,我使用的是linux+arm的方式

以下答案由GPT-4.5Plus大模型(语音)与博主A努力中.......共同编写:
这个问题很有可能是因为Wayland不支持Qt Virtual Keyboard导致的。Qt Virtual Keyboard是Qt的一个输入法虚拟键盘模块,它需要底层窗口系统的支持。Wayland目前还不支持Qt Virtual Keyboard,所以在Wayland环境下使用会报错且虚拟键盘无法显示。
解决这个问题有两种方法:

  1. 不使用Wayland,改用X11
    如果您的系统支持X11显示服务器,可以切换到X11而不使用Wayland。在这种情况下,Qt Virtual Keyboard可以正常工作。
    可以在程序启动时增加环境变量:
    export QT_QPA_PLATFORM=xcb # 选择XCB作为QPA后端,而非wayland
    或在代码中设置:
cpp
QApplication::setEnvironment("QT_QPA_PLATFORM", "xcb");

  1. 使用系统自带的虚拟键盘
    不使用Qt Virtual Keyboard,改用系统自带的虚拟键盘。不同系统的方案如下:
  • Ubuntu/Debian: ibus-keyboard
  • Arch: fcitx-keyboard
  • Windows: 通过WinAPI显示输入法面板
    corresponding changes to configure or remove Qt Virtual Keyboard.
    所以,解决这个问题的关键在于:
  1. 不使用Wayland,改用支持Qt Virtual Keyboard的X11
  2. 改用系统自带的虚拟键盘,不使用Qt Virtual Keyboard

首先,在Linux系统中,如果您正在使用Wayland显示服务器,则需要将QT_IM_MODULE变量设置为"qtvirtualkeyboard_compositor"而不是"qtvirtualkeyboard"。这是因为Wayland不支持客户端实现虚拟键盘,只支持由显示服务器(即Wayland Compositor)提供的虚拟键盘。因此,您可以尝试将QT_IM_MODULE变量更改为以下内容:

qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard_compositor"));

如果您使用的不是Wayland显示服务器,请将QT_IM_MODULE变量重置为"qtvirtualkeyboard",然后尝试检查虚拟键盘是否正常工作。

其次,建议您确保已正确安装了qt5virtualkeyboard-5.15.2以及所需的依赖项,并且已使用正确的编译选项重新构建了您的应用程序。您还可以通过在终端中输入以下命令来检查qt5virtualkeyboard是否可用:

sudo apt-get install qtdeclarative5-qtvirtualkeyboard-plugin

最后,如果上述方法无法解决您的问题,请尝试查看错误日志并详细了解错误消息。它们可能会提供有关问题的更多线索,并帮助您识别导致问题的根本原因。

根据你提供的信息,我猜测你在使用 QT 开发一个嵌入式系统,并且希望在程序中启用虚拟键盘输入。然而,当你点击输入框时,虚拟键盘只是一闪而过,这可能是因为 QT 没有在输入框中正确地设置输入源。

要解决这个问题,你可以按照以下步骤进行操作:

在 QT 中创建一个输入框,确保输入框已经启用了输入源。你可以使用以下代码实现:

QInputMethodManager* inputManager = qobject_cast<QInputMethodManager*>(sender());  
if (inputManager) {  
    inputManager->setCurrentInputMethod(QInputMethod::弹出式键盘);  
}


在程序启动时,设置 QT_IM_MODULE 环境变量为 qtvirtualkeyboard。这可以通过以下代码实现:

qputenv("QT_IM_MODULE", "qtvirtualKeyboard");  


在程序中使用虚拟键盘输入时,需要确保输入源已经被正确设置。你可以使用以下代码检查输入源是否已正确设置:

QInputMethodManager* inputManager = qobject_cast<QInputMethodManager*>(sender());  
if (inputManager) {  
    inputManager->currentInputMethod().activate();  
}


希望这些步骤能够帮助你解决问题。如果问题仍然存在,请提供更多详细信息,以便我更好地理解你的问题并为你提供帮助。

根据您提供的信息,报错信息 "qt.qpa.wayland: qtvirtualkeyboard currently is not supported at client-side, use QT_IM_MODULE=qtvirtualkeyboard at compositor-side." 表示在客户端使用qtvirtualkeyboard当前不受支持,应该在组合器端使用 QT_IM_MODULE=qtvirtualkeyboard。

因此,您需要在组合器端设置QT_IM_MODULE环境变量,以便使用qtvirtualkeyboard。组合器是运行桌面环境的进程,可以是X11或Wayland等。如果您使用的是Wayland组合器,可以尝试在启动组合器的命令中设置QT_IM_MODULE环境变量,例如:

Copy
QT_IM_MODULE=qtvirtualkeyboard /usr/bin/weston
如果您使用的是X11组合器,可以在启动应用程序之前设置QT_IM_MODULE环境变量,例如:

Copy
export QT_IM_MODULE=qtvirtualkeyboard
./your_app
另外,您还可以尝试使用其他虚拟键盘方案,例如 fcitx-qimpanel 等。这些方案可能需要安装额外的软件包,但它们可能在您的环境中更加稳定和适用。如果您决定使用其他虚拟键盘方案,可以按照该方案的文档进行配置和使用。

最后,如果您仍然遇到问题,请检查您的环境配置和代码实现,并查找可能的解决方案。您可以在QT的文档、社区或论坛中寻求帮助,也可以咨询专业的软件开发人员或技术支持人员的建议。