Qt注册类对象单例与单类型区别
1.实现类型SingletonTypeExample
#ifndef SINGLETONTYPEEXAMPLE_H
#define SINGLETONTYPEEXAMPLE_H#include <QObject>class SingletonTypeExample : public QObject
{Q_OBJECT
public://只能显示构造类对象explicit SingletonTypeExample(QObject *parent = nullptr);//属性Q_PROPERTY (int somePropertyREAD someProperty //读取属性值WRITE setSomeProperty //设置属性值NOTIFY somePropertyChanged) //属性值变更通知public://析构~SingletonTypeExample(){};//QML前端可直接调用方法Q_INVOKABLE int doSomething() {setSomeProperty(5);return m_someProperty;}//获取属性值int someProperty() const {return m_someProperty;}//设置属性值void setSomeProperty(int val) {m_someProperty = val;//属性值emit somePropertyChanged(val);//发射属性变更信号}signals:void somePropertyChanged(int newValue);//属性变更信号声明private:int m_someProperty;//私有属性值
};#endif // SINGLETONTYPEEXAMPLE_H
#include "singletontypeexample.h"
//构造实现
SingletonTypeExample::SingletonTypeExample(QObject *parent): QObject{parent}, m_someProperty(0) //初始化属性变量
{}
2.创建类对象静态实例,已为下面注册用
//注册类对象为单类型
static QObject *QObjectSingletonTypeProvider(QQmlEngine *engine, QJSEngine *scriptEngine){Q_UNUSED(engine)Q_UNUSED(scriptEngine)SingletonTypeExample *st = new SingletonTypeExample();//实例化类对象并返回该对象return st;
}
因为注册函数要求包含QQmlEngine *engine, QJSEngine *scriptEngine这两个参数
3.注册单类型
//注册类对象单类型qmlRegisterSingletonType<SingletonTypeExample>("Qt.jsApi.QObjectSingleton", 1, 0, "MyApi",QObjectSingletonTypeProvider );
4.在QML中使用单类型

上面为注册类对象为单类型使用
下面演示注册类对象为单例使用
1.创建类型MySysInfo
#ifndef MYSYSINFO_H
#define MYSYSINFO_H#include <QObject>
#include <QQuickItem>
#include <QSysInfo>class MySysInfo : public QObject
{Q_OBJECT
public:explicit MySysInfo(QObject *parent = nullptr);//productTypeQ_INVOKABLE QString getSysProductType();//productVersionQ_INVOKABLE QString getSysProductVersion();//currentCpuArchitectureQ_INVOKABLE QString getSysCurrentCpuArchitecture();
signals:};#endif // MYSYSINFO_H
#include "mysysinfo.h"MySysInfo::MySysInfo(QObject *parent): QObject{parent}
{}QString MySysInfo::getSysProductType()
{return QString( QSysInfo::productType().toStdString().c_str());
}QString MySysInfo::getSysProductVersion()
{return QSysInfo::productVersion();
}QString MySysInfo::getSysCurrentCpuArchitecture()
{return QSysInfo::currentCpuArchitecture();
}
2.注册MySysInfo为单例
//注册单例MySysInfo *_info = new MySysInfo();qmlRegisterSingletonInstance<MySysInfo>("App.SysInfo",1,0,"SysInfo",_info);
3.在QML中使用单例

上面为注册C++类对象为单类型与单例使用
下面注册JS单例并使用
1.创建JS静态单类型
//首先,定义单类型提供函数(回调).
static QJSValue jsSingleTypeProvider(QQmlEngine *engine, QJSEngine *jsEngine){Q_UNUSED(engine)static int val = 5;QJSValue singleType = jsEngine->newObject();singleType.setProperty("propertyOfSingleType", val++);return singleType;
}
JS注册单类型函数要求提供一个包含QQmlEngine *engine, QJSEngine *jsEngine这两个参数 并返回QJSValue类型的静态对象
2.注册JS单类型
//其次,注册js单例函数给qml调用qmlRegisterSingletonType("Qt.jsApi", 1, 0, "JsApi", jsSingleTypeProvider);
3.在QML中使用JS注册单类型

4.直接使用Lambda注册JS单类型
//直接使用Lambda表达式注册qmlRegisterSingletonType("Qt.jsApi.Ext", 1, 0, "JsApiExt", [](QQmlEngine *engine, QJSEngine *jsEngine) -> QJSValue {Q_UNUSED(engine)static QString strVal = "HelloWorld";QJSValue obj = jsEngine->newObject();obj.setProperty("propertyOfJsApiWithString", strVal);return obj;});
5.在QML中使用

相关文章:
Qt注册类对象单例与单类型区别
1.实现类型SingletonTypeExample #ifndef SINGLETONTYPEEXAMPLE_H #define SINGLETONTYPEEXAMPLE_H#include <QObject>class SingletonTypeExample : public QObject {Q_OBJECT public://只能显示构造类对象explicit SingletonTypeExample(QObject *parent nullptr);//…...
Rocky Linux 运维工具yum
一、yum的简介 yum是用于在基于RPM包管理系统的包管理工具。用户可以通过 yum来搜索、安装、更新和删除软件包,自动处理依赖关系,方便快捷地管理系统上的软件。 二、yum的参数说明 1、install 用于在系统的上安装一个或多个软件包 2、seach 用…...
linux下的ollama
refs: https://github.com/ollama/ollama/blob/main/docs/linux.md 1)安装 curl -fsSL https://ollama.com/install.sh | sh 2)修改服务配置,打开端口允许所有IP地址 refs(https://github.com/ollama/ollama/blob/main/docs/faq.md#where-are-models-stored) C…...
YOLOv9详细解读,改进提升全面分析(附YOLOv9结构图)
🥑 Welcome to Aedream同学 s blog! 🥑 文章目录 1. 概要1.1 模型结构上的改动:1.2 训练脚本上的改动: 2. 介绍2.1 背景2.2 主要贡献 3. 总体框架3.1 可编程梯度信息(PGI)3.1.1 辅助可逆分支3.1.2 多级辅助信息 3.2 Ge…...
html基础操练和进阶修炼宝典
文章目录 1.超链接标签2.跳锚点3.图片标签4.表格5.表格的方向属性6.子窗口7.音视频标签8.表单9.文件上传10.input属性 html修炼必经之路—各种类型标签详解加展示,关注点赞加收藏,防止迷路哦 1.超链接标签 <!DOCTYPE html> <html lang"en…...
从Mysql 数据库删除重复记录只保留其中一条(删除id最小的一条)
准备工作:新建表tb_coupon /*Navicat Premium Data TransferSource Server : rootlocalhostSource Server Type : MySQLSource Server Version : 50527Source Host : localhost:3306Source Schema : leyouTarget Server Type : My…...
从http到websocket
阅读本文之前,你最好已经做过一些websocket的简单应用 从http到websocket HTTP101HTTP 轮询、长轮询和流化其他技术1. 服务器发送事件2. SPDY3. web实时通信 互联网简史web和httpWebsocket协议1. 简介2. 初始握手3. 计算响应健值4. 消息格式5. WebSocket关闭握手 实…...
UE5 C++ Widget练习 Button 和 ProgressBar创建血条
一. 1.C创建一个继承Widget类的子类, 命名为MyUserWidget 2.加上Button 和 UserWidget的头文件 #include "CoreMinimal.h" #include "Components/Button.h" #include "Blueprint/UserWidget.h" #include "MyUserWidget.genera…...
抖店无货源违规频发,不能入驻?这个是真的吗?
我是电商珠珠 还没有踏入抖店这个电商行业的新手,单从别人的口中,听说了抖店无货源特别容易违规,还会被扣除全部的保证金,得不偿失之类的话。有的还专门劝诫新手不要做抖店,做了就会亏本之类的话,这搞得人…...
HarmonyOS—开发云数据库
您可以在云侧工程下开发云数据库资源,包括创建对象类型、在对象类型中添加数据条目、部署云数据库。 创建对象类型 对象类型(即ObjectType)用于定义存储对象的集合,不同的对象类型对应的不同数据结构。每创建一个对象类型&#…...
mysql查询某个数据库的数量有多少GB
要查询MySQL数据库中某个数据库(或称为“schema”)所占用的磁盘空间大小(以GB为单位),你可以使用information_schema数据库中的TABLES和DATA_LENGTH、INDEX_LENGTH字段来获取每个表的数据和索引的大小,然后…...
table展示子级踩坑
##elemenui中table通过row中是否有children进行判断是否展示子集,通过设置tree-prop的属性进行设置,子级的children的名字可以根据自己的子级名字进行替换,当然同样可以对数据处理成含有chilren的子级list。 问题: 1.如果是根据后…...
xss过waf的小姿势
今天看大佬的视频学到了几个操作 首先是拆分发可以用self将被过滤的函数进行拆分 如下图我用self将alert拆分成两段依然成功执行 然后学习另一种姿势 <svg id"YWxlcnQoIlhTUyIp"><img src1 οnerrοr"window[eval](atob(document.getElementsByTagNa…...
【六袆 - MySQL】MySQL 5.5及更高版本中,InnoDB是新表的默认存储引擎;
InnoDB 这是一个MySQL组件,结合了高性能和事务处理能力,以确保可靠性、健壮性和并发访问。它体现了ACID设计哲学。它作为一个存储引擎存在,处理使用ENGINEINNODB子句创建的或修改的表。请参阅第14章“InnoDB存储引擎”以获取有关架构细节和管…...
可移植性(兼容性)测试指南
可移植性是指应用程序能够安装到不同的环境中,在不同的环境中使用,甚至可以移动到不同的环境中。当然,前两者对所有系统都很重要。就PC软件而言,鉴于操作系统、共存和互操作应用程序、硬件、带宽可用性等方面的快速变化࿰…...
软件更新快讯-Obsidian更新-1.5.8 linux Appimage直装
更新内容 1.5.8: 从具有相同属性的文件导航时,固定属性不会显示。 修复了Home和End在导航文档顶部和底部时不总是起作用的问题。 Fixed properties not appearing when navigating from a file that has the same properties.Fixed Home and End not a…...
Android Gradle开发与应用 (二) : Groovy基础语法
1. Groovy是什么 Groovy是基于JVM虚拟机的一种动态语言,语法和Java非常相似,并能够无缝地与Java代码集成和互操作,增加了很多动态类型和灵活的特性。(闭包、DSL) 语法和Java非常相似这个特点,意味着,如果我们完全不懂…...
iptables学习
iptables的4表5链的处理流程 一:业务地址请求服务时,首先经过iptables服务,iptables通过校验规则,通过校验是否同意业务访问,规则从上到下,匹配规则都失败了的话,走默认规则 (1&…...
kafka 集群搭建
kafka集群搭建 1. kafka介绍 Apache Kafka是一个开源的流处理平台,由Scala和Java编写1。它是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统2。Kafka的最大特…...
springboot-基础-eclipse配置+helloword示例
备份笔记。所有代码都是2019年测试通过的,如有问题请自行搜索解决! 下一篇:springboot-基础-添加model和controller的简单例子常用注解含义 目录 配置helloword示例新建项目创建文件 配置 spring boot官方有定制版eclipse,也就是…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
