首页 > 其他分享 >set_source_files_properties QT_QML_SINGLETON_TYPE

set_source_files_properties QT_QML_SINGLETON_TYPE

时间:2024-07-05 18:32:00浏览次数:20  
标签:files SINGLETON set CMake 创建 qml main QML

目录

前言

QT_QML_SINGLETON_TYPE 属性

基本用法

示例

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

2. 编辑 CMakeLists.txt

3. 创建 main.cpp

4. 创建 MySingleton.qml

5. 创建 qml.qrc

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

标签:files,SINGLETON,set,CMake,创建,qml,main,QML
From: https://blog.csdn.net/fengzhongye51460/article/details/140116805

相关文章

  • BeanUtil复制时,两对象中数据类型不一致导致的问题Can not set java.time.LocalDateTim
    @DatapublicclassAVo{privateLongendTime;privateStringname;privateStringid;}@DatapublicclassABVo{privateLocalDateTimeendTime;privateStringname;privateStringid;}AVoaVo=newAVo();......
  • list、set、map的区别
    1.元素的重复性:1.1list可以存放重复的元素1.2set的add方法可以存放重复的元素,但最终set中存放的元素是不重复的。1.3map是以键值对的方式存储的,key不能重复,值可以重复。2.元素是否为null2.1list可以存放多个null2.2set中add方法可以存放多个null,但最终set中只有一个nul......
  • Intellij IDEA maven setting 中, 在设置maven setting file 的后面有个 Override 是
    在IntelliJIDEA中,Maven设置中的"Override"选项用于指定一个自定义的settings.xml文件以覆盖默认的Maven设置。具体而言,它允许你使用一个不同于全局Maven配置的设置文件,这样可以在项目级别或者环境级别进行特定的配置。以下是更详细的解释:Mavensettings.xml文件:......
  • 最有效的ResultSet转换为JSON?
    最有效的ResultSet转换为JSON? 原文链接: https://cloud.tencent.com/developer/information/%E6%9C%80%E6%9C%89%E6%95%88%E7%9A%84ResultSet%E8%BD%AC%E6%8D%A2%E4%B8%BAJSON%EF%BC%9F-article最有效的ResultSet转换为JSON的方法是使用Java中的Jackson库。Jackson是一个......
  • 当你不小心使用了 git reset --hard HEAD^
    会话总结1.使用gitreset--hardHEAD^后如何恢复撤销的gitcommit提交知识点:gitreset--hardHEAD^会回退到前一个提交,并删除工作目录中的更改。通过gitreflog查看操作历史记录,找到被回退的提交哈希值。使用gitreset--hard<commit_hash>恢复到特定的提交。......
  • program files 文件夹权限问题
    首先关闭系统管理员对普通管理员的权限按Windows+R键,打开“运行”,然后输入“gpedit.msc",就是打开组策略,这个在控制面板中也可以打开。在组策略里找到“计算机配置”-“Windows设置”-“安全设置”-“本地策略”-“安全选项”,在“安全选项”里认真查找“用户帐户控制-以管理员模......
  • npm config set registry切换npm镜像源
    要切换npm镜像源,可以使用npmconfigsetregistry命令。以下是切换到官方的npm镜像源的步骤:查看当前npm镜像源:npmconfiggetregistry如果当前的镜像源不是官方的npm镜像源(https://registry.npmjs.org/),则需要切换。切换到官方的npm镜像源:npmconfigsetregistry......
  • IISRESET 是用于重启 Microsoft Internet Information Services(IIS)的命令行工具。它通
    IISRESET命令起源于Microsoft开发的InternetInformationServices(IIS),这是一种用于Windows操作系统的强大的Web服务器软件。IIS早在WindowsNT3.51的时候就已经存在,而IISRESET命令则是作为管理和操作IIS服务的一部分而引入的。具体来说,IISRESET命令的主要功能是......
  • 在Java中,Map 接口的实现(如 HashMap,LinkedHashMap,TreeMap 等)并不保证遍历 keySet() 或
    在Java中,Map接口的实现(如HashMap,LinkedHashMap,TreeMap等)并不保证遍历keySet()或entrySet()时的顺序。但是,某些特定的Map实现确实提供了特定的遍历顺序。1、HashMap:它基于哈希表实现,并不保证映射的顺序,特别是遍历顺序。因此,当你使用map.keySet()遍历HashMap时,结果可......
  • 关于自定义unordered_set\unordered_map中Hash和KeyEqual:函数对象和lambda表达式简单
    以unordered_set为例,首先在cppreference中查看其模板定义:可以看到Hash类默认是std::hash<Key,KeyEqual类似,本文将Hash以函数对象写出,将KeyEqual以lambda写出。classhashvec{ public: size_toperator()(constvector<int>&vec)const{ returnhash<int>()(vec[0])+hash......