从C/C++的模式转到qml开发中,跨文件访问变量和函数是很头疼的事情。通过id访问,虽然可以实现,但是代码量大了就不太好控制了,id可以覆盖、跨文件访问就不太好统一规范起来。这时候qml的单例模式就变得很有用了,qml的单例模式,在整个应用中只会被实例化1次,没有副本,所以在一定程度上可以代替全局变量。有时候跨文件的调用、访问可以间接通过单例模块进行。
如下: 创建单例模块
<pre style="margin-top: 0px; margin-bottom: 0px;">pragma<span style=" color:#c0c0c0;"> </span>Singleton
import QtQuick 2.0
QtObject{
property var viewManager: null;
function log(argv)
{
console.log(argv);
}
}
代码第一行是关键 ,表明这是一个单例。使用这个单例其中一种方法如下:
qmldir 这个文件没有后缀名。内容如下
singleton QMLSettings 1.0 QMLSettings.qml
建议使用记事本 notpad++一类软件打开
调用该模块操作如下
import QtQuick 2.6
import QtQuick.Window 2.2
import "QMLSettings"
Window {
id: root
visible: true
title: qsTr("Hello World")
ViewManager
{
id: viewManager
Component.onCompleted:
{
QMLSettings.viewManager = this;
}
}
}
代码进行了裁剪,第三行 导入了 import "QMLSettings" //即途中文件夹的名称
在实例化ViewManager的onCompleted事件中
访问全局的QMLSettings.viewManager 变量并且将自身赋值过去,这样其他文件的模块可以通过QMLSettings.viewManager访问并且调用viewManager的变量函数。
QMLSettings.viewManager = this;
本文讲述的是QML编写的单例模块,还有一种单例模块是C++实现的,下次在记录该种方式的实现方法。
多谢JCY同学的博文,边学边实现,有了本文。谢谢。
import
"QMLSettings"