创建QML单例在项目中使用

24 篇文章 1 订阅

一、创建QML单例的几种方式

在我们开发项目时,一般都会单独写一个文件作为全局的配置文件。而这个文件一般都是全局只能有一个对象。因此在QML文件中,也提供了创建单例的方法。

1.纯QML文件创建单例模式

1.1假设有配置文件名为:Config.qml,内容如下:

pragma Singleton  //qml开头必须要有这一句

import QtQuick 2.9

QtObject {
    id: config
    objectName: "config"

    property color backgroundColor: "#f9f9f9" //背景颜色
}

如上所示,该QML文件和普通QML文件不同之处在于文件第一行为:

pragma Singleton

1.2在Config.qml同级目录创建 qmldir 文件:

singleton Config Config.qml

如上所示,用singleton 来做声明。

1.3具体使用方法:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.5
import Qt.labs.platform 1.1
import "../public"

ApplicationWindow {
    x:300;
    y:50;
    width: 720;
    height: 480;
    visible: true;
    title: qsTr("test singleton");

    background: Rectangle {
        color:Config.backgroundColor;
    }
}

2.使用qmlRegisterSingletonType方式创建单例

为什么要使用这种方式?因为我的项目中用的都是qml插件方式来组合的。并且全局的东西我分离出来为一个单独的插件。因此我需要把Config.qml内容导出。

基于上面的场景,只需要在xxxxx_plugin.cpp文件中加入以下内容:

#include "qmlglobalfilemoduleplugins_plugin.h"

#include "globalfileitem.h"

#include <qqml.h>

void QmlglobalfilemodulepluginsPlugin::registerTypes(const char *uri)
{
    // @uri qmlglobalfilecomponents
    qmlRegisterType<GlobalFileItem>(uri, 1, 0, "GlobalFileItem");

    //导出自己加的qml文件
    //qmlRegisterType(QUrl("qrc:/qml/Config.qml"), uri, 1, 0, "GlobalConfig");//该导出语句会出错
    qmlRegisterSingletonType(QUrl("qrc:/qml/Config.qml"), uri, 1, 0, "GlobalConfig");
}

 运行结果:

一个是在main.qml中,一个是在插件中。但是打印出来的对象都是同一个。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liu-Eleven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值