最新版本已更新请用最新版本:108.qt quick-QML虚拟软键盘V3版本-新增点击空白区域收回键盘、支持ListView、Flickable自动布局-CSDN博客在上章我们学习了45.qt quick-qml虚拟软键盘详解(一)_诺谦的博客-CSDN博客,知道如何自定义qml键盘后,本章继续来学习.1.介绍接下来我们便来自定义一款好看的qml软键盘.如下图所示:支持背景更换、支持动图:支持动态加载移除语言(支持多国语言,高达40多个语言):可以看到我们选择了繁体后,返回就可以选择繁体语言了.除此之外还支持:支持拖拽、自由缩小放大、支持定位坐标、2.代码实现由于软键盘是个特殊程序,是提供给app主程序使用的,所以我们以QML插件的形式创建工程、QML插件讲解:44.qt quick-qml插件详解_诺谦的博客-CSDN博客整个工程如下所示:其中qmldir如下所示:module KeyboardPlugin plugin KeyboardPlugin internal KeyboardBackImage KeyboardBackImage.qml internal KeyboardSet KeyboardSet.qml internal KeyboardTitle KeyboardTitle.qml KeyboardWindow 1.0 KeyboardWindow.qml typeinfo mymodule.qmltypesqmldir在QML插件章节有讲解,这里定义了我们的插件是在KeyboardPlugin模块里面.后面我们就需要在主程序App.exe所在位置 创建一个KeyboardPlugin目录,然后将qml、qmldir、dll统统放进去然后编译得到一个dll:3.写APP主程序在app.pro中需要定义如下所示:RESOURCES ../KeyboardPlugin/keyboard_plgin.qrc # 使用静态插件 static { QT svg QTPLUGIN qtvirtualkeyboardplugin } win32 { contains(QT_ARCH, x86_64) { message(x64) # 输出目录 DESTDIR $$PWD/../outputX64/ } else { message(win32) # 输出目录 DESTDIR $$PWD/../outputWin32/ } }我们这里指定了输出目录,因为我们要将编译好的KeyboardPlugin模块插件放到exe所在的路径下,让app能够找到键盘.我们以outputWin32目录为例,在该目录下创建个KeyboardPlugin目录(我们的插件模块),然后将键盘插件的qml、qmldir、dll都放进来:然后在main.cpp中导入键盘:最后写main.qml:import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Controls 2.14 import KeyboardPlugin 1.0 import qrc:/keyboard_plugin/ Window { id: window visible: true width: 640 height: 595 title: qsTr(Hello World) /*使用键盘插件*/ KeyboardWindow { id: keyboard mainObj: window } Column { id: textEditors spacing: 15 anchors.fill: parent Label { color: #565758 text: 全局键盘示例 anchors.horizontalCenter: parent.horizontalCenter font.pixelSize: 22 } TextField { width: parent.width placeholderText: One line field font.pixelSize: 20 onPressed: { keyboard.targetOpen(this, KeyboardWindow.BaseToHorizontal) } onFocusChanged: if (focus) { keyboard.targetOpen(this, KeyboardWindow.BaseToHorizontal) } } TextField { id: passwordField width: parent.width echoMode: TextInput.Password placeholderText: 密码区域 inputMethodHints: Qt.ImhNoAutoUppercase | Qt.ImhPreferLowercase | Qt.ImhSensitiveData | Qt.ImhNoPredictiveText font.pixelSize: 20 onPressed: { keyboard.targetOpen(this, KeyboardWindow.BaseToHorizontal) } onFocusChanged: if (focus) { keyboard.targetOpen(this, KeyboardWindow.BaseToHorizontal) } } TextField { id: upperCaseField width: parent.width placeholderText: Upper case field inputMethodHints: Qt.ImhUppercaseOnly font.pixelSize: 20 onPressed: { keyboard.targetOpen(this, KeyboardWindow.BaseToHorizontal) } onFocusChanged: if (focus) { keyboard.targetOpen(this, KeyboardWindow.BaseToHorizontal) } } TextField { id: lowerCaseField width: parent.width placeholderText: Lower case field inputMethodHints: Qt.ImhLowercaseOnly font.pixelSize: 20 onPressed: { keyboard.targetOpen(this, KeyboardWindow.BaseToHorizontal) } onFocusChanged: if (focus) { keyboard.targetOpen(this, KeyboardWindow.BaseToHorizontal) } } TextField { id: phoneNumberField validator: RegExpValidator { regExp: /^[0-9\\-\#\*\ ]{6,}$/ } width: parent.width placeholderText: 拨打电话模式 inputMethodHints: Qt.ImhDialableCharactersOnly font.pixelSize: 20 onPressed: { keyboard.targetOpen(this, KeyboardWindow.BaseToHorizontal) } onFocusChanged: if (focus) { keyboard.targetOpen(this, KeyboardWindow.BaseToHorizontal) } } TextField { id: formattedNumberField width: parent.width placeholderText: 仅支持数字或者符号 inputMethodHints: Qt.ImhFormattedNumbersOnly font.pixelSize: 20 onPressed: { keyboard.targetOpen(this, KeyboardWindow.BaseToHorizontal) } onFocusChanged: if (focus) { keyboard.targetOpen(this, KeyboardWindow.BaseToHorizontal) } } TextArea { id: textArea width: parent.width height: 70 placeholderText: 多行编辑 font.pixelSize: 20 onPressed: { keyboard.targetOpen(this, KeyboardWindow.BaseToHorizontal) } onFocusChanged: if (focus) { keyboard.targetOpen(this, KeyboardWindow.BaseToHorizontal) } background: Rectangle { color: #eeeeee } } TextField { id: digitsField width: parent.width placeholderText: 只允许使用数字 inputMethodHints: Qt.ImhDigitsOnly font.pixelSize: 20 onPressed: { keyboard.targetOpen(this, KeyboardWindow.BaseToHorizontal) } onFocusChanged: if (focus) { keyboard.targetOpen(this, KeyboardWindow.BaseToHorizontal) } } } }这里我们定义了一个KeyboardWindow组件、然后每次当焦点为true 或者 用户点击输入框的时候,就调用keyboard.targetOpen(this, KeyboardWindow.BaseToHorizontal)、第一个参数 : 用来定位键盘的坐标,始终在输入框下面显示第二个参数 : 设置键盘的水平对齐方式、我们这里是居中显示如下图所示:qml键盘插件源码和App程序已经上传至专栏群(第一章底部获取)中,感兴趣的自行下载、入群需验证订阅用户名,尽量选择订阅专栏、学习会员会验证失败、
企业数字化 ERP 产品动态
相关推荐
Django前端HTML页面For循环应用 Django 是一个用于构建强大 Web 应用的 Python 框架,在构建动态网页时,前端模板的管理显得尤为重要,尤其是模板中的 for 循环的应用。
这部分内容将围绕 Django 框架的模板引擎的 for 循环使用,分析其基本操作和常见应用。 文章目录 for 循环基本操作 总结 for 循环基本操… · 2026/9/24 13:31:05
Django实现xAdmin导航菜单使用Awesome图标 在现代网页开发中,用户界面(UI)的设计和美观是提升用户体验的重要一环。图标作为用户交互中的视觉元素,能够直观地传递信息,减少文字的占用,提高页面的整洁度和可用性。Font Awesome 是一个常用的图标库,可以通过简单的类名来应用各种图标。 本文将展示如何在 Django 项… · 2026/9/24 13:31:05
射频同轴电缆衰减特性剖析:从损耗机理到工程测试与选型 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:30:53
django CMS 4.1.4 发布说明与升级指南:安全修复、兼容性矩阵与源码级修复解析 django CMS 4.1.4 发布说明与升级指南:安全修复、兼容性矩阵与源码级修复解析 【免费下载链接】django-cms The easy-to-use and developer-friendly enterprise CMS powered by Django 项目地址: https://gitcode.com/gh_mirrors/dj/django-cms
django CMS… · 2026/9/24 13:59:43
拆解 ROCm 文档仓库:官方文档站背后的 3 条数据流水线与 changelog 自动化 拆解 ROCm 文档仓库:官方文档站背后的 3 条数据流水线与 changelog 自动化 【免费下载链接】legacy-rocm-build AMD ROCm™ Software - GitHub Home 项目地址: https://gitcode.com/GitHub_Trending/ro/legacy-rocm-build
导读
这个仓库是 ROCm 文档站&… · 2026/9/24 13:59:25
IGBT选型实战指南:从工况分析到参数计算与验证 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:59:25
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44