新闻详情

新闻详情

首页 / 资讯中心 / 详情

46.qt quick-自定义非常好看的qml虚拟软键盘-支持换肤、动态加载移除语言(二)

发布时间:2026/11/13 7:39:36来源:尧图网络
46.qt quick-自定义非常好看的qml虚拟软键盘-支持换肤、动态加载移除语言(二)
最新版本已更新请用最新版本: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程序已经上传至专栏群(第一章底部获取)中,感兴趣的自行下载、入群需验证订阅用户名,尽量选择订阅专栏、学习会员会验证失败、
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/13 0:43:49

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/12 23:59:09

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/12 9:50:02

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/12 9:25:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/12 15:57:44

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/13 0:02:27

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉