单例模式(下)
文章目录
- 文章介绍
- 步骤安排及单例讲解
- step1:注册单例类型(main.cpp)
- step2:定义类和私有构造函数(keyboardinputmanager.h)
- step3:(keyboardinputmanager.cpp)
- step4:在qml中调用keyboardinputmanager类(main.qml)
- 重点步骤
- main.cpp
- keyboardinputmanager.h
- keyboardinputmanager.cpp
- main.qml
文章介绍
给一个单例模式的例子,实现将键盘输入数据打印到界面文本框的操作
步骤安排及单例讲解
step1:注册单例类型(main.cpp)
step2:定义类和私有构造函数(keyboardinputmanager.h)
step3:(keyboardinputmanager.cpp)
step4:在qml中调用keyboardinputmanager类(main.qml)
单例模式的优点:非常适合在 QML 中集成复杂的后端逻辑,使得前端界面可以直接调用后端逻辑的单例实例进行数据处理或业务逻辑运算。
step1:注册单例类型(main.cpp)
main.cpp中只用关注 qmlRegisterSingletonInstance("com.example", 1, 0, "KeyboardInputManager", KeyboardInputManager::instance());;
这行代码将 KeyboardInputManager注册为 QML 中的单例类型
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include "KeyboardInputManager.h"int main(int argc, char *argv[])
{QGuiApplication app(argc, argv);QQmlApplicationEngine engine;qmlRegisterSingletonInstance("com.example", 1, 0, "KeyboardInputManager", KeyboardInputManager::instance());engine.load(QUrl(QStringLiteral("qrc:/main.qml")));if (engine.rootObjects().isEmpty())return -1;return app.exec();
}
step2:定义类和私有构造函数(keyboardinputmanager.h)
#ifndef KEYBOARDINPUTMANAGER_H
#define KEYBOARDINPUTMANAGER_H#include <QObject>// KeyboardInputManager 类:管理键盘输入的单例类
class KeyboardInputManager : public QObject
{Q_OBJECT
public:// 获取单例实例的方法static KeyboardInputManager* instance(){// 静态局部变量,确保单例static KeyboardInputManager instance;return &instance;}signals:// 按键事件信号,传递按键文本void keyPressed(const QString &key);protected:// 事件过滤器方法,用于捕获和处理键盘事件bool eventFilter(QObject *obj, QEvent *event) override;private:// 私有构造函数,确保单例模式KeyboardInputManager();// 私有析构函数~KeyboardInputManager();// 禁用拷贝构造函数KeyboardInputManager(const KeyboardInputManager&) = delete;// 禁用赋值运算符KeyboardInputManager& operator=(const KeyboardInputManager&) = delete;
};#endif // KEYBOARDINPUTMANAGER_H
step3:(keyboardinputmanager.cpp)
#include "KeyboardInputManager.h"
#include <QGuiApplication>
#include <QKeyEvent>// 构造函数:安装事件过滤器以捕获键盘事件
KeyboardInputManager::KeyboardInputManager()
{// 安装事件过滤器,将当前实例作为事件过滤器QGuiApplication::instance()->installEventFilter(this);
}// 析构函数:默认析构函数
KeyboardInputManager::~KeyboardInputManager() {}// 事件过滤器:捕获并处理键盘事件
bool KeyboardInputManager::eventFilter(QObject *obj, QEvent *event)
{// 检查事件类型是否为键盘按下事件if (event->type() == QEvent::KeyPress) {// 将事件转换为键盘事件QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);// 发射 keyPressed 信号,将按键文本传递给连接的槽函数emit keyPressed(keyEvent->text());// 返回 true 表示事件已处理return true;} else {// 调用父类的事件过滤器处理其他类型的事件return QObject::eventFilter(obj, event);}
}
step4:在qml中调用keyboardinputmanager类(main.qml)
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Window 2.15
import com.example 1.0Window {visible: truewidth: 640height: 480title: qsTr("Keyboard Input")TextArea {id: textAreaanchors.fill: parentwrapMode: Text.Wrapfocus: trueKeys.onPressed: {KeyboardInputManager.keyPressed(event.text)}}Connections {target: KeyboardInputManageronKeyPressed: {textArea.text += key}}
}
重点步骤
main.cpp

keyboardinputmanager.h

keyboardinputmanager.cpp

main.qml

相关文章:
单例模式(下)
文章目录 文章介绍步骤安排及单例讲解step1:注册单例类型(main.cpp)step2:定义类和私有构造函数(keyboardinputmanager.h)step3:(keyboardinputmanager.cpp)step4:在qml中…...
合约期VS优惠期,搞明白他们的区别才能避免很多坑!
在购买流量卡时,相信大家也都发现了,市面上的不少套餐都是有合约期和优惠期的,尤其是联通和移动,那么,什么是合约期?什么又是优惠期呢? 其实,目前很多在网上办理的大流量卡都是有…...
函数式反应式编程(FRP)在Scala中的实践与探索
函数式反应式编程(Functional Reactive Programming,简称FRP)是一种编程范式,它结合了函数式编程(Functional Programming,FP)的声明式特性和反应式编程(Reactive Programming&#…...
NGINX配置web文件服务
一、需求描述 系统需要提供文件(pdf、图片)等上传后支持预览功能。 二、实现方式 2.1 文件权限配置 chmod arwx -R public/chmod 是更改文件权限的命令。-R 是递归选项,表示更改目录及其所有子目录和文件的权限。arwx 是权限设置…...
deepspeed docker集群实现多机多卡训练----问题记录及解决方案资源汇总
. Docker中实现Deepspeed多机多卡训练 【掘金-雨田君的记事本】docker容器中deepspeed多机多卡集群分布式训练大模型 . 问题记录及解决方案资源汇总 问题1:deepspeed socketStartConnect: Connect to 172.18.0.3<54379> failed : Software caused connectio…...
恢复 IntelliJ IDEA 中消失的菜单栏
要恢复 IntelliJ IDEA 中消失的菜单栏,可以按照以下简单步骤操作: 使用快捷键打开搜索:首先,双击 Shift 键打开全局搜索对话框。 搜索“Menu”:在搜索框中输入 menu,然后从搜索结果中选择与“Main Menu”相…...
漏洞利用开发基础学习记录
文章目录 简介Win32缓冲区溢出内容难点 SEH 溢出内容难点 Egg Hunters内容难点 Unicode 溢出内容难点 x86-64 缓冲区溢出内容难点 参考资料 简介 本文基于ERC.Xdbg漏洞分析文章进行初步归纳整理,主要有Win32 缓冲区溢出、SEH 溢出、Egg Hunters、Unicode 溢出、x86…...
云通SIPX,您的码号资源智能调度专家!
在数字化转型的浪潮中,号码资源作为企业与客户沟通的重要桥梁,其管理效率直接关系到企业运营的成败。随着运营商对号码资源管理的规范化和精细化,企业对高效、智能的号码资源管理需求日益增长,以实现对外呼叫的降本增效。 一、什么…...
04-Mysql 索引,事务
MySQL 索引介绍 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址。在数据十分庞大的时候,索引可以大大加快查询的速度。这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行…...
U盘提示格式化怎么搞定?本文有5种方法(内含教程)
U盘提示格式化是一种常见故障,即:当U盘插入电脑后,电脑上弹出对话框,提示该U盘需要格式化才能使用。 接触不良、文件系统损坏、热插拔、感染病毒、芯片损坏等原因都可能导致U盘出现此故障。这时点击“格式化”,大概率会…...
day02-登录模块-主页鉴权
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.分析登录流程1.1传统思路是登录校验通过之后,直接调用接口,获取token之后,跳转到主页1.2vue-element-admin模板的登录思路&…...
git rebase的使用
没有排版,但是干货 因为项目要求,所以使用rebase指令 我使用的是rebase 的分支变基的功能 情景描述: 一共有两个分支:master owner 我在owner分枝上开发,有好多次commit master上也有同事在正常commit, …...
LICEcap-开源GIF 屏幕录制工具
LICEcap-开源GIF 屏幕录制工具 开源GIF 屏幕录制工具 下载可以访问:https://www.cockos.com/licecap/ 点击Record,开始录制 点击Stop,停止录制 点击Record,进入该页面 display in animation(在动画中显示) …...
【Java Web】会话管理
目录 一、为什么需要会话管理? 二、会话管理机制 三、Cookie概述 四、HttpSession概述 4.1 HttpSession时效性 一、为什么需要会话管理? HTTP协议在设计之初就是无状态的,所谓无状态就是在浏览器和服务器之间的通信过程中,服务器并…...
RestTemplate修改默认转换器,使用FastJsonConverter
问题描述: 在使用RestTemplate发送POST请求时,发现发送的数据并未按配置的JSONField转换,导致服务方一直收不到参数 排查过程: 将itemList改成Items传输即可 原因分析: RestTemplate有默认的转换器,所以…...
什么是div移动指令?如何用vue自定义指令实现?
目录 一、Vue.js框架介绍二、vue自定义指令directive三、什么是div移动指令四、使用vue自定义指令directive写一个div移动指令 一、Vue.js框架介绍 Vue.js是一个用于构建用户界面的渐进式JavaScript框架。它设计得非常灵活,可以轻松地被集成到现有的项目中…...
Golang | Leetcode Golang题解之第187题重复的DNA序列
题目: 题解: const L 10 var bin map[byte]int{A: 0, C: 1, G: 2, T: 3}func findRepeatedDnaSequences(s string) (ans []string) {n : len(s)if n < L {return}x : 0for _, ch : range s[:L-1] {x x<<2 | bin[byte(ch)]}cnt : map[int]in…...
智能猫砂盆到底是不是智商税?解救上班族双手的测评合集来了
不得不说,像我这样的上班族真的是很需要一个智能猫砂盆了。普通的猫砂盆一天就要打扫3次,遇到很能拉的猫咪的时候,就不止是三次那么简单了。如果有个产品能帮我解决这个问题,让我能放心外出,那又何乐而不为呢ÿ…...
java 数据新增、更新、删除监听,并记录日志或其他业务
数据新增、更新、删除监听,并记录日志或其他业务 1.使用场景 日志记录、KPI考核(业务进行到某个阶段,对人员的考核)等等 实体监听器 实体增加注解 EntityListeners({KpiOrderCounter.class}) /*** 订单管理考核** author sul…...
developer.android.com在国内无法正常访问解决方法
将android.com替换为android.google.cn...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
