在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
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++实现