Qt 创建 单例/Singleton qml 文件

文章介绍了如何在Qt6的CMake项目中利用QML的pragmaSingleton指令创建单例文件Constants.qml,通过修改这个单例文件中的全局字体大小属性,影响所有引用该单例文件的组件,实现全局字体设置。步骤包括在QML文件中声明pragmaSingleton,CMakeLists.txt中配置单例属性,以及在按钮事件中动态更改字体大小。
摘要由CSDN通过智能技术生成

在Qt 6中, 将某个qml设置为单例文件, 或创建单例文件

  • 可能的场景: 通过修改单例文件中字体大小, 所有组件引入单例文件字段, 达到修改全局字体大小目的
  • 适用于CMake项目
  • 使用环境:
Qt Creator 10.0.1
Qt 6.5.0
Windows 11 Pro KB5026447

步骤一, 添加 pragma Singleton, 如, 此处为Constants.qml

pragma Singleton	// 请关注此处
import QtQuick 6.2

QtObject {
    property int globalFontSize: 12
}

步骤二, 在管理项目qml文件的CMakeListst.txt中, 添加以下代码:

set_source_files_properties(Constants.qml	// 使用了"pragma Singleton"的qml文件
    PROPERTIES
        QT_QML_SINGLETON_TYPE true
)
  • 例如, 在我的项目中, 部分代码如下:
  • 应将单例文件作为常规qml文件处理
# 注意, 不可将 set_source_files_properties 置于 qt_add_qml_module 之后, 否则qmldir文件的生成不会将文件视为 singleton
set_source_files_properties(Constants.qml
    PROPERTIES
        QT_QML_SINGLETON_TYPE true
)

qt_add_qml_module(appNewRawQuick
    URI NewRawQuick
    VERSION 1.0
    QML_FILES Main.qml
        Constants.qml
)

步骤三, 引用单例文件:

    Button {
        id: simpleBtn
        text: qsTr("Change")
        checkable: false
        font.pixelSize: Constants.globalFontSize	// 直接引用刚添加的单例文件, 像使用静态类一样使用它

        Connections {
            target: simpleBtn
            function onClicked() {
                Constants.globalFontSize = 20;		// 直接引用刚添加的单例文件, 像使用静态类一样使用它
            }
        }
    }
    Button {
        id: reset
        text: qsTr("Reset")
        checkable: false
        font.pixelSize: Constants.globalFontSize
        x: 130

        Connections {
            target: reset
            function onClicked() {
                Constants.globalFontSize = 12;
            }
        }
    }

结果参考如下:

在这里插入图片描述

因为没有找的合适方法, 去修改全局字体, 因此使用这种方式去实现在程序中, 修改字体大小, 且无需依赖C++实现

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值