QT linux下 虚拟键盘使用及注意事项

今天在Ubuntu 环境下 进行qt开发并使用虚拟键盘,总结了一下过程和遇到的一些bug

一.配置虚拟键盘

pro工程文件添加 QT += virtualkeyboard

主函数main中,在QApplication之前添加qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));

使用时注意:

如果lineedit希望只输入数字可以设置lineedit->setInputMethodHints(Qt::ImhDigitsOnly);启用数字键盘

如果控件是手动创建记得设置lineedit->setFocusPolicy(Qt::StrongFocus);

二.BUG

1.虚拟键盘一闪而过

原因:ubuntu使用的显示是wayland,qt对其兼容性有问题,在 X11 系统下:虚拟键盘以独立的桌面窗口形式出现,设置 QT_IM_MODULE=qtvirtualkeyboard环境变量后,应用程序(客户端)可以直接调用并显示键盘。这是最简单直接的方式;在 Wayland 系统下:出于安全和管理考虑,Wayland 设计上要求输入法(包括虚拟键盘)必须在合成器端运行,而不是在单个客户端应用程序中。

解决方法:

主函数main中,在QApplication之前添加qputenv("QT_QPA_PLATFORM", "xcb");最简单方法切换显示模式。

2.悬浮框一闪而退

原因: Qt::Popup类型的窗口有一个内置行为:当它失去焦点或用户点击到其区域外部时,它会自动关闭。虚拟键盘的弹出会抢夺焦点,导致悬浮框收到"失去焦点"或"窗口失活"的信号而关闭。

解决方法:关闭Qt::Popup,在悬浮框中的输入框接收到例如editingFinished信号时,手动关闭悬浮框

cpp 复制代码
void xxForm::on_value_editingFinished()
{
    /*
    .
    .
    */
    this->close();
}
相关推荐
skr爱码士5 分钟前
05_Qt 核心模块概览——Qt Core、Gui、Widgets、Quick 的职责划分
c++·qt·系统架构·客户端
搬砖的小码农_Sky16 分钟前
LANDrop 在 Ubuntu 上的安装方法
linux·运维·计算机网络·ubuntu
raindayinrain22 分钟前
深入理解Linux内核--内存架构,页框分配器,性能优化
linux·numa·水位·区域·页框分配
Mortalbreeze42 分钟前
深入理解 TCP 协议(二):TCP 可靠传输与高效通信机制详解
linux·服务器·网络·网络协议·tcp/ip
sel_943 分钟前
【Linux】Linux 常用命令手册
linux·服务器
MOONICK43 分钟前
QT的UI开发框架
qt·ui
郝学胜-神的一滴1 小时前
Horse3D 游戏引擎研发笔记(七):Clydesdale——从流式日志到多输出订阅
c++·qt·unity·游戏引擎·图形渲染·unreal engine·opengl
2401_868534781 小时前
企业信息安全建设
linux·网络协议·beautifulsoup
goyeer1 小时前
Liunx日志管理与journalctl
java·linux·运维·服务器·运维开发·信息化·信息化企业管理
酷可达拉斯1 小时前
自动化运维-Ansible Role综合应用案例-基于LNMP部署wordpress
linux·运维·服务器·自动化·ansible