set_source_files_properties QT_QML_SINGLETON_TYPE

目录

前言

[QT_QML_SINGLETON_TYPE 属性](#QT_QML_SINGLETON_TYPE 属性)

基本用法

示例

[1. 创建一个基本的 CMake 项目](#1. 创建一个基本的 CMake 项目)

[2. 编辑 CMakeLists.txt](#2. 编辑 CMakeLists.txt)

[3. 创建 main.cpp](#3. 创建 main.cpp)

[4. 创建 MySingleton.qml](#4. 创建 MySingleton.qml)

[5. 创建 qml.qrc](#5. 创建 qml.qrc)

[6. 创建 main.qml](#6. 创建 main.qml)

构建和运行项目

结论


前言

在使用 Qt 和 CMake 构建项目时,有时你可能需要将某些 QML 文件设置为单例类型。Qt 为此提供了一个名为 QT_QML_SINGLETON_TYPE 的属性,可以通过 CMake 的 set_source_files_properties 命令来设置。

QT_QML_SINGLETON_TYPE 属性

当你希望将某个 QML 文件在整个应用程序中作为单例实例使用时,可以将其标记为单例类型。这在大型 QML 项目中尤其有用,因为它简化了状态管理和资源共享。

基本用法

你可以通过以下步骤在 CMake 项目中设置 QT_QML_SINGLETON_TYPE 属性:

  1. 确保你已经导入了 Qt 和 QML 模块
  2. 使用 set_source_files_properties 命令设置 QML 文件的 QT_QML_SINGLETON_TYPE 属性

示例

以下是一个完整的示例,展示如何在 CMake 项目中将 QML 文件设置为单例类型。

1. 创建一个基本的 CMake 项目

首先,创建一个基本的 CMake 项目结构:

复制代码
MyQtApp/
├── CMakeLists.txt
├── main.cpp
├── MySingleton.qml
└── qml.qrc
2. 编辑 CMakeLists.txt

CMakeLists.txt 文件中,添加以下内容:

复制代码
cmake_minimum_required(VERSION 3.14)
project(MyQtApp LANGUAGES CXX)

find_package(Qt6 REQUIRED COMPONENTS Core Quick)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

add_executable(MyQtApp
    main.cpp
    qml.qrc
)

set_source_files_properties(MySingleton.qml PROPERTIES QT_QML_SINGLETON_TYPE TRUE)

target_link_libraries(MyQtApp
    PRIVATE Qt6::Core Qt6::Quick
)

qt_add_qml_module(MyQtApp
    URI MyApp
    VERSION 1.0
    QML_FILES MySingleton.qml
)
3. 创建 main.cpp

在项目目录中,创建 main.cpp 文件,并添加以下内容:

复制代码
#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    const QUrl url(QStringLiteral("qrc:/main.qml"));
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}
4. 创建 MySingleton.qml

在项目目录中,创建 MySingleton.qml 文件,并添加以下内容:

复制代码
import QtQuick 2.15

QtObject {
    id: singleton
    property string message: "Hello from Singleton!"
}
5. 创建 qml.qrc

在项目目录中,创建 qml.qrc 文件,并添加以下内容:

复制代码
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
    <file>MySingleton.qml</file>
    <file>main.qml</file>
</qresource>
</RCC>
6. 创建 main.qml

在项目目录中,创建 main.qml 文件,并添加以下内容:

复制代码
import QtQuick 2.15
import QtQuick.Controls 2.15
import MyApp 1.0

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Text {
        text: MySingleton.message
        anchors.centerIn: parent
    }
}

构建和运行项目

完成上述步骤后,你可以构建并运行你的 Qt 项目,看看 QML 单例的效果。

复制代码
mkdir build
cd build
cmake ..
cmake --build .
./MyQtApp

结论

通过这些步骤,你应该能够在 CMake 项目中使用 set_source_files_properties 命令将 QML 文件设置为单例类型。如果有任何问题或需要进一步的帮助,请随时告诉我!

相关推荐
玄同76518 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
吾日三省吾码18 小时前
别只会“加索引”了!这 3 个 PostgreSQL 反常识优化,能把性能和成本一起打下来
数据库·postgresql
chian-ocean19 小时前
百万级图文检索实战:`ops-transformer` + 向量数据库构建语义搜索引擎
数据库·搜索引擎·transformer
小Tomkk19 小时前
数据库 变更和版本控制管理工具 --Bytebase 安装部署(linux 安装篇)
linux·运维·数据库·ci/cd·bytebase
qq_124987075319 小时前
基于JavaWeb的大学生房屋租赁系统(源码+论文+部署+安装)
java·数据库·人工智能·spring boot·计算机视觉·毕业设计·计算机毕业设计
倒流时光三十年20 小时前
SpringBoot 数据库同步 Elasticsearch 性能优化
数据库·spring boot·elasticsearch
码农小卡拉20 小时前
深入解析Spring Boot文件加载顺序与加载方式
java·数据库·spring boot
怣5020 小时前
MySQL多表连接:全外连接、交叉连接与结果集合并详解
数据库·sql
wjhx21 小时前
QT中对蓝牙权限的申请,整理一下
java·数据库·qt
冰暮流星21 小时前
javascript之二重循环练习
开发语言·javascript·数据库