QML之QML定义单例组件

前言

在C++中,单例模式对于我们来说,并不陌生,C++中的单例模式的特性如下:

  • 单例类只能有一个实例
  • 单例类必须自己自己创建自己的唯一实例

  • 单例类必须给所有其他对象提供这一实例
  • QML作为后起之秀,我们不妨猜测一下,它既然是由 Qt Widgets 封装而来的界面开发框架,那么它的身上,应该有很多 Qt Widgets 相同的特性。

    目录

  • 测试说明
  • QML 单例模式的理解

  • QML 单例模式的使用环境 --建议

  • QML 单例模式的实现

  • 运行效果

  • QML 单例模式的避坑
  • 测试说明
    测试项目结构:
    project
          -- [dir]Resources
                -- [dir]Style
                      -- qmldir
                      -- PushButtonTemplateStyle.qml
                -- main.qml
          -- main.cpp
          -- project.qrc
          -- project.pro
          -- project.pro.user
    
    QML 单例模式的理解

      单例模式就是在软件声明周期内只有一个实例对象,在单例模式的对象中,我们常常实现一些公共数据存放、公共接口,这样能简化我们项目中的代码重复性
    能提高代码阅读性的前提下,还能大幅度的偷懒喝喝茶,emm~~~,会偷懒的程序员才是正经的程序员,宾果

      单例模式的特性就是以空间换时间,在现代的电脑,或许真的不缺那么一点空间了,很多时候都比较注重用户的体验度。最赞的一点就是单例模式内有效的避
    免线程安全的问题,当然,在 QML 中没啥卵用。。。

    QML 单例模式的使用环境 --建议

  • QML 单例模式很适合做全局的配置文件,如组件样式管理、常用方法的管理与封装
  • 当某一个参数或者对象被多次重复引用,但这个参数或者对象并没有改变时,用单例模式能更好的优化我们的程序和代码可读性、合理性
  • QML 单例模式的实现

  • Step 1: 新建并封装单例模式对象
  • /* -- PushButtonTemplateStyle.qml
     * QML 单例模式关键字 > pragma Singleton , singleton
     * pragma Singleton  > 在单例模式实现 .qml 文件第一行的位置上标注
     * singleton         > 在与单例模式实现 .qml 文件同级目录下的 qmldir 文件里添加此标注
     * 单例模式可以是一个可视化的组件、也可以是一个不可视的组件,不要限制自己的想象力
    pragma Singleton
    import QtQuick 2.0
    
    Item {
    
        readonly property string windowTitle: "Heelo World"
    
        readonly property Rectangle hoverStyle: Rectangle {
    
            color: "red"
        }
    
        readonly property Rectangle prssedStyle: Rectangle {
    
            color: "black"
        }
    }
    */
    

  • Step 2: 新建封装的单例模式对象文件对应的 qmldir
  • /** -- qmldir
     * singleton [某块名] [主版本.次版本] [.qml 目录地址]
    singleton PushButtonTemplateStyle 1.0 PushButtonTemplateStyle.qml
    */
    

  • Step 3: 使用单例模式的对象
  • /** --xxxx.qml
    // 导入单例模式封装对象
    import QtQuick 2.0
    import "qrc:/style/"
    
    Rectangle {
    
        id: myRect
        color: PushButtonTemplateStyle.templateColor
    }
    */
    
    /** --main.qml
    import QtQuick 2.12
    import QtQuick.Window 2.12
    import "qrc:/style/"
    
    Window {
    
        id: rootWindow
        visible: true
        width: 640
        height: 480
        title: PushButtonTemplateStyle.windowTitle
    
        MyRect {
    
            anchors.fill: parent
        }
    }
    */
    
    运行效果

    QML之QML定义单例组件

    QML 单例模式的避坑

  • 每一个使用这个单例的对象,都要在文件前置声明时显示导入该对象模块
  • 原文链接: https://www.cnblogs.com/shHome/p/14143159.html

    欢迎关注

    微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

      QML之QML定义单例组件

    原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/206111

    非原创文章文中已经注明原地址,如有侵权,联系删除

    关注公众号【高性能架构探索】,第一时间获取最新文章

    转载文章受原作者版权保护。转载请注明原作者出处!

    (0)
    上一篇 2023年2月12日 下午10:29
    下一篇 2023年2月12日 下午10:29

    相关推荐