4.qml单例模式

news/2025/1/3 6:21:51/

这里写目录标题

js_1">js文件单例模式

直接添加一个js文件到qml
在这里插入图片描述
修改内容
在这里插入图片描述

TestA.qml

import QtQuick 2.0
import QtQuick.Controls 2.12
import "./MyWork.js" as MWItem {Row{TextField {onEditingFinished: {MW.setA(text)}}Button{onClicked: lb.text = MW.getA()}Label{id: lb}}}

main.qml

import QtQuick 2.12
import QtQuick.Window 2.12Window {visible: truewidth: 640height: 480title: qsTr("Hello World")TestA{width: parent.widthheight: 200}TestA{y:200width: parent.widthheight: 200}}

很明显使用import引入的js文件数据是不共享的,也就是他们在qml中的体现为都是个实例
在这里插入图片描述
但是有的场景我们希望我们的js文件是一个单例,也就是数据是共享的,怎么做呢?
只需要在js文件最顶部加入一行

.pragma library

既可
MyWork.js

.pragma library
var a = ""function setA(v){a = v;
}function getA() {return a;
}

总结:
有缺点,缺点就是定义的变量不会通知qml页面的变更
qml页面数据的刷新绑定的变量其实还是使用了qml的信号与槽的机制,而
js定义的变量没有ValueChanged这种信号, 故刷新不了qml页面

qml_89">qml文件单例模式

qml单例模式
需要在qml最上面加入这一行,没有逗号,跟js不一样

pragma Singleton

同时还要添加一个qmldir文件暴露此单例
在这里插入图片描述
在这里插入图片描述

总结
全局变量的使用,导致多个qml文件同时触发刷新,
哪怕那个页面不可见,大大拉低刷新性能

为此我们要确保管控好这些变量,

尽量不要让他们本身成功绑定值或者所在的方法成为绑定值(有值),
否则一旦此值变动都会触发左值的更新

    Row{TextField {onEditingFinished: {TestB.setName(text)}}Text {visible:  falsetext: {console.log("11111")return TestB.name}}Text {text: {console.log("22222")return TestB.name}}}

http://www.ppmy.cn/news/1527460.html

相关文章

第十八节:学习统一异常处理(自学Spring boot 3.x的第五天)

这节记录下如何通过AOP方式统一处理异常拦截。 第一步: 新建一个exception包,创建一个ExcetionHandler.java(名字随意取) package cn.wcyf.wcai.exception;import cn.wcyf.wcai.common.Result; import org.springframework.web…

mysql实用系列:日期格式化

在MySQL中,你可以使用DATE_FORMAT()函数来格式化日期。DATE_FORMAT() 函数通常用于格式化 DATETIME 或 TIMESTAMP类型的字段。这个函数允许你按照指定的格式来显示日期和时间。下面是一些常见的日期格式化的例子: 显示年-月-日: SELECT DATE_…

经典sql题(六)查找用户每月累积访问次数

使用聚合开窗查找用户每月累积访问次数,首先介绍一下使用 GROUP BY和开窗的区别 GROUP BY 行数变化:使用 GROUP BY 后,原始数据会按指定列进行分组,结果中每组只保留一行,因此行数通常减少。作用:适用于需…

java-在ANTLR中BaseListner的方法和词法规则的关系0.5.0

java-在ANTLR中BaseListner的方法和词法规则的关系0.5.0 环境介绍词法规则与类方法的对应关系ClassOrInterfaceModifierContext与词法对应关系参考 环境介绍 java.g4ideawindows10 词法规则与类方法的对应关系 随便找一个词法规则,如ClassOrInterfaceModifier&am…

linux--防火墙

linux防火墙 ubuntu 1, 关于ufw 查看防火墙: sudo ufw status 关闭防火墙: sudo ufw disable 开启: sudo ufw enable 2,firewalld 执行: systemctl status firewalld 出现: Unit fi…

RTC、ADC

RTC RTC(Real-Time Clock)是实时时钟模块,用于跟踪实际时间(年、月、日、时、分、秒),即使在系统断电或处于低功耗模式下也能保持时间的准确性。 特点 时间和日期跟踪低功耗模式支持可编程闹钟和定时器备…

在 Windows 系统上,文件传输到虚拟机(VM)可以通过 VS Code 的图形界面(GUI)或命令行工具进行操作

在 Windows 系统上,文件传输到虚拟机(VM)可以通过 VS Code 的图形界面(GUI)或命令行工具进行操作。以下是几种方法: ### 方法 1: 使用 VS Code 图形界面 1. **连接到远程 VM**: - 在 VS Cod…

Android Glide:让图片加载从未如此简单

在 Android 开发中,图片加载一直是一个关键环节。无论是从网络还是本地加载图片,都需要考虑到性能、内存管理和用户体验等多个方面。而在这方面,Glide 成为了众多开发者的首选库之一。本文将带你深入了解 Glide 的强大之处,并介绍如何在项目中快速集成和使用 Glide。 为什…