Qml 内部单例模式

版权声明:如需转载,请告知博主并声明出处 https://blog.csdn.net/CLinuxF/article/details/88886133

前言

其实这个单例模式,我已经使用了2年多了,从接触qml时候就会用了,一直也没记录,现在感觉脑子不好用了,反反复复感觉老是容易忘记一些细节性的东西,所以记录一下,当然里面也会说到一些小技巧和对应的BUG解决。

问题

回归正题,如何在整个QML工程界面中使用一些公用的数据和方法呢?毋庸置疑,肯定是单例模式,很多人可能习惯使用了C++单例模式,定然想不到QML也有单例模式,所以一般在QML界面直接使用自定义的QML文件单例比在C++实现单例然后注册给QML使用要方便和灵活多。

好了,说了这么多,直接上代码把:
【以下是核心代码】

pragma Singleton
import QtQuick 2.12

/**
* @brief: qml单例模式
* @author: Fu_Lin
* @date:  2019-03-29
* @description: 主要记录一些公用的数据和方法
*/
QtObject {
    property string blueColor: "blue"
    property int textSize: 20
    property string bgColor:"red"
}

qmldir

singleton QmlSingleton 1.0 QmlSingleton.qml

main.qml

import QtQuick 2.12
import QtQuick.Window 2.12
import "."  //单例模式必须显式的调用qmldir文件

Window {
    id: id_window

    visible: true
    width: 640
    height: 480
    title: qsTr("testMain")

    flags: Qt.Window | Qt.FramelessWindowHint //去掉标题栏

    Rectangle {
        anchors.fill: parent
        color: QmlSingleton.blueColor  //<---单例模式的调用
    }
}

运行后的效果图:
在这里插入图片描述

小技巧记录

上面的代码已经是可以使用的单例文件了,值得注意的是单例模式必须显式的调用qmldir文件

如何将qmldir放到和main.qml一个文件下,只要"."打点获取当前qmldir目录即可,如果qmldir不在main.qml一个目录,而是放到了和单例文件一个目录,比如单例文件在XXX/qmlMoudel/Singleton目录下,而main.qml在XXX目录下,那么调用qmldir必须显示的导入该目录:

import "XXX/qmlMoudel/Singleton"

然后调用单例类即可,在这里说明一下,一般这样调用。
IDE会出现一个BUG
就是它根本识别不来这个导入的路径,还会爆红警告,单例组件自然也就不能变更颜色,不会补全,会让人感觉好像是错的,其实只要运行效果还是有的,只是有不好看的红色警告,要想IDE识别,只需要关闭当前工程,再关闭IDE,重新打开IDE,再打开工程,这个时候单例组件就会被识别了,补全功能自然也就有了。

扫描二维码关注公众号,回复: 6053974 查看本文章

PS: 所以一般为了方便我都是打点(import “.”)导入,将qmldir放到和main.qml一个层级,毕竟每次写出一大串路径实在太累。

猜你喜欢

转载自blog.csdn.net/CLinuxF/article/details/88886133
QML