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 文件设置为单例类型。如果有任何问题或需要进一步的帮助,请随时告诉我!

相关推荐
松涛和鸣10 分钟前
DAY69 Practical Guide to Linux Character Device Drivers
linux·服务器·arm开发·数据库·单片机·嵌入式硬件
咩咩不吃草19 分钟前
Linux环境下MySQL的安装与使用与Navicat
linux·运维·数据库·mysql·navicat
Aloudata19 分钟前
NoETL 指标平台如何保障亿级明细查询的秒级响应?——Aloudata CAN 性能压测深度解析
数据库·数据分析·自动化·指标平台
maoku6620 分钟前
从关键词到语义:向量数据库如何让AI真正理解你的需求
数据库·人工智能
寻道码路20 分钟前
【MCP探索实践】Google GenAI Toolbox:Google开源的企业级AI数据库中间件、5分钟搞定LLM-SQL安全互联
数据库·人工智能·sql·开源·aigc
数据知道21 分钟前
PostgreSQL 核心原理:一文掌握 WAL 缓冲区与刷盘策略(性能与数据安全的权衡)
数据库·postgresql
三个人工作室24 分钟前
mysql允许所有ip地址访问,mysql允许该用户访问自己的数据库【伸手党福利】
数据库·tcp/ip·mysql
小小逐月者25 分钟前
SQLModel 开发笔记:Python SQL 数据库操作的「简化神器」
数据库·笔记·python
QQ828929QQ25 分钟前
MySQL Explain 分析 SQL 执行计划
数据库·sql·mysql
我是小超人-雨石花26 分钟前
postgresql + postgis安装
数据库·postgresql·postgis·空间数据库