QML-1- qml简介及项目创建

news2024/9/23 1:24:36

文章目录

  • 1. QML 简介
  • 2. 项目创建
  • 3. 目录结构
  • 4. CMakeLists.txt 简单介绍
  • 5. 运行demo

1. QML 简介

根据官网介绍,qml 为qt一个模块,使用Qml语言开发应用程序和库提供了一个框架。它定义并实现了语言和引擎基础结构,并提供了一个API,使应用程序开发人员能够注册自定义QML类型和模块,并将QML代码与JavaScript和c++集成在一起。Qt Qml模块提供了Qml API和c++ API。
简单来说就是其集成了一个JS引擎,可以实现c++和js互调,使用ji的方式来声明式构建图形界面。

官网文档地址:https://doc.qt.io/all-topics.html

2. 项目创建

选择Qt Quick 应用
在这里插入图片描述
输入项目名,选择项目创建路径
在这里插入图片描述

这里构建工具使用CMake, 既然官方都放弃qmake使用cmake了, 那就使用cmake
在这里插入图片描述
选择你需要的版本, 没需求就选最新
在这里插入图片描述
next
在这里插入图片描述
在这里插入图片描述
这里不需要版本控制的话直接选None
在这里插入图片描述

3. 目录结构

在这里插入图片描述

  • CMakeLists.txt:
    位于项目根目录下。这是CMake的配置文件,用于定义如何构建你的项目。包括指定项目名称、版本、源文件、依赖项、编译选项等。
  • 源代码目录(上例QML_demo1)
    • Source Files
      存放C++源代码文件。
    • qml.qrc
      qml文件存放目录,
  • CMake Modules
    项目用到的其他一些CMake模块

4. CMakeLists.txt 简单介绍

# 1、 设置 CMake 变量
cmake_minimum_required(VERSION 3.14)    # CMake最低版本

project(QML_demo1 VERSION 0.1 LANGUAGES CXX)       # 项目版本0.1,编程语言C++

set(CMAKE_INCLUDE_CURRENT_DIR ON)       # 确保编译器在当前源文件的目录中查找包含的头文件

# 自动处理(自动执行) Qt 的 uic、moc 和 rcc 文件。这通常是必要的
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

# 设置 C++ 标准为 C++17,并强制要求该标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 2、查找 Qt 包
# 尝试先查找 Qt6,如果找不到则查找 Qt5。这里指定了需要 Core 和 Quick 组件
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Quick)
# 基于先前找到的 Qt 版本(Qt5 或 Qt6),再次查找并确认需要的组件
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Quick)

# 3. 定义项目源文件
# 设置项目源文件列表,包括 C++ 源文件和 QML 资源文件
set(PROJECT_SOURCES
        main.cpp
        qml.qrc
)

# 4、 根据项目类型和 Qt 版本创建目标:
# 对于 Qt 6,使用 qt_add_executable 创建一个可执行文件。
# 对于 Qt 5,如果目标平台是 Android,则创建一个共享库;否则,创建一个可执行文件
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(QML_demo1
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET QML_demo1 APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
    if(ANDROID)
        add_library(QML_demo1 SHARED
            ${PROJECT_SOURCES}
        )
# Define properties for Android with Qt 5 after find_package() calls as:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
    else()
        add_executable(QML_demo1
          ${PROJECT_SOURCES}
        )
    endif()
endif()

# 5、 链接库:
# 将 Qt 的 Core 和 Quick 组件链接到可执行文件
target_link_libraries(QML_demo1
  PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Quick)

# 6、 设置目标属性:
# 对于 macOS,设置 bundle 相关的属性
set_target_properties(QML_demo1 PROPERTIES
    MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

# 7、 安装目标:
# 使用 install 命令指定如何安装构建的目标。对于 macOS bundle,它将被安装到根目录;对于库,它将被安装到 ${CMAKE_INSTALL_LIBDIR} 指定的目录
install(TARGETS QML_demo1
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
#8、 Qt 6 特定的步骤:
# qt_import_qml_plugins(QML_demo1):对于 Qt 6,确保 QML 插件被正确导入到可执行文件中。
# qt_finalize_executable(QML_demo1):对于 Qt 6,确保所有 Qt 相关的资源(如 QML、翻译等)都被正确地包含在可执行文件中。
if(QT_VERSION_MAJOR EQUAL 6)
    qt_import_qml_plugins(QML_demo1)
    qt_finalize_executable(QML_demo1)
endif()

5. 运行demo

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1701994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

搭建属于自己的 Git 仓库:GitLab

搭建属于自己的 Git 仓库:使用 GitLab 文章目录 搭建属于自己的 Git 仓库:使用 GitLab什么是 GitLab?准备工作安装 Docker使用Docker Compose 快速构建GitLab1、从docker compose快速搭建GitLab2、部署到服务器并访问3、浏览器访问 在现代软件…

Linux-挂盘-分区-卸盘

Linux-挂盘-分区-卸盘 1. 添加硬盘 2. 查看硬盘 [rootlocalhost /]# lsblk # 查看我们新添加的磁盘 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 80G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 …

基于JT/T808、JT/T1078、苏标、粤标视频主动安全监控

1.概述 如下图是以实时视频点播与部标机产生了主动安全报警,各个服务之间的交互流程说明。 整个系统有以下几个核心组件组成: 1:系统业务端:车载监控业务系统,给用户提供车载监控整套业务流程与界面呈现;…

蓝海项目揭秘:跨境选品师的崛起与挑战

随着全球化贸易的日益深入和电子商务的蓬勃发展,跨境选品师这一新兴职业逐渐走进人们的视野。跨境选品师,顾名思义,就是专门负责为跨境电商平台挑选和推荐适合海外市场的商品的专业人士。那么,跨境选品师这一职业能否被视为一个蓝…

【算法】排序

排序算法在信息学非常常用。Hello&#xff01;大家好&#xff0c;我是学霸小羊&#xff0c;今天讲几个排序算法。 1.“打擂台”排序 思路&#xff1a;a[ i ]和a[ j ]打擂台&#xff08;i<j&#xff09;。 这个方法简单易懂&#xff0c;只需要看看需不需要交换。按从大到小…

行为设计模式之策略模式

文章目录 概述原理结构图 代码实现小结 概述 策略模式(strategy pattern)的原始定义是&#xff1a;定义一系列算法&#xff0c;将每一个算法封装起来&#xff0c;并使它们可以相互替换。策略模式让算法可以独立于使用它的客户端而变化。 在软件开发中也会遇到相似的情况&…

考研数学|强化跟「张宇」还是「武忠祥」?看这一篇!

考研数学强化阶段是备考过程中非常关键的一环&#xff0c;它不仅要求学生巩固和深化基础知识&#xff0c;还要求学生能够灵活运用所学知识解决复杂问题。 在选择张宇老师或武忠祥老师的高数强化课时&#xff0c;你可以考虑以下几个方面。 首先每位学生都有自己独特的学习风格…

问题记录_stm32“No target connected“

问题描述&#xff1a; 基于HAL库和stm32cubeMX生成的代码&#xff0c;烧录时出现如下报错窗口&#xff1a; 问题原因&#xff1a; stm32cubeMX生成代码时关闭了SWJ调试功能 解决方法&#xff1a; 在项目中找到__HAL_AFIO_REMAP_SWJ_DISABLE();并注释掉 然后短按复位键的…

通用代码生成器应用场景二,快速原型

通用代码生成器应用场景二&#xff0c;快速原型 对项目经理&#xff0c;产品经理和售前工程师而言&#xff0c;开发快速原型是一种常见的需求。使用通用代码生成器&#xff0c;您可以更好&#xff0c;更快的开发系统的快速原型。通用代码生成器对完成CRUD和登录系统阶段的快速…

新手必看!TikTok视频0播放的5大原因及解决方法

很多刚起步的TikTok卖家常会遇到一个烦心事&#xff1a;发布的视频播放量少得可怜&#xff0c;甚至有时是0播放。这确实让人挺沮丧的。到底如何突破TikTok视频总是播放量为0的瓶颈&#xff1f;别担心&#xff0c;今天为大家总结了tiktok视频播放量上不去的5种原因和相应的解决方…

【leetcode2028. 找出缺失的观测数据(自己写出来了)】

给你一个长度为 m 的整数数组 rolls &#xff0c;其中 rolls[i] 是第 i 次观测的值。同时给你两个整数 mean 和 n 。返回一个长度为 n 的数组&#xff0c;包含所有缺失的观测数据&#xff0c;且满足这 n m 次投掷的 平均值 是 mean 。如果存在多组符合要求的答案&#xff0c;只…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十一)- 微服务(1)

微服务 1.认识微服务 SpringCloud底层是依赖于SpringBoot的&#xff0c;并且有版本的兼容关系&#xff0c;如下&#xff1a; 2. 服务拆分 需求 &#xff1a; 把订单信息和用户信息一起返回 从订单模块向用户模块发起远程调用 &#xff0c; 把查到的结果一起返回 步骤 &…

ubuntu切换CUDA版本

查询版本 cd /usr/local在此目录下进行 ls 命令可以查看自己安装了哪些版本 使用stat cuda命令可以查看当前软连接(符号)为哪个版本&#xff0c;即使用的是哪个版本 若要修改使用的CUDA&#xff0c;只需要删除此软连接&#xff0c;再创建一个新的软连接&#xff0c;指向自己…

最新!!2024年上半年软考【中级】网络工程师 综合知识真题解析

2024上半年软考考试已经结束了&#xff0c;为大家整理了网友回忆版的网络工程师真题及答案&#xff0c;总共41道题。 上半年考试的宝子们可以对答案预估分数&#xff01;准备下半年考的宝子可以提前把握考试知识点和出题方向&#xff0c;说不定会遇到相同考点的题目&#xff01…

python九九乘法表的打印思考及实现

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、问题引入 九九乘法表的显示需求 二、问题分析 嵌套循环的概念 屏幕宽度与换行的考虑…

【NumPy】关于numpy.multiply()函数,看这一篇文章就够了

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

艾体宝干货 | 用于故障排除的最佳 Wireshark 过滤器

在网络故障排除过程中&#xff0c;Wireshark是一款非常强大的工具&#xff0c;它可以用来分析网络数据包并解决各种问题。本文将介绍一些好用的Wireshark过滤器&#xff0c;以便更有效地进行故障排除。 分析网络行为和排除网络故障就像用漏斗过滤渣滓。因此&#xff0c;网络协…

研二学妹面试字节,竟倒在了ThreadLocal上,这是不要应届生还是不要女生啊?

一、写在开头 今天和一个之前研二的学妹聊天&#xff0c;聊及她上周面试字节的情况&#xff0c;着实感受到了Java后端现在找工作的压力啊&#xff0c;记得在18&#xff0c;19年的时候&#xff0c;研究生计算机专业的学生&#xff0c;背背八股文找个Java开发工作毫无问题&#x…

KT6368A蓝牙芯片AT命令会被透传出去,指令对为什么会被透传出去

一、简介 KT6368A再被连接之后&#xff0c;AT命令会被透传出去。被透传的这组AT命令是符合文档要求&#xff0c;不应被透传&#xff0c;实际却经常被透传。并且可以每次都复现 详细描述 有问题部分的串口数据监控结果如下&#xff1a;其中41 54 2B 42 4D 46 30 41 46 42 43 3…

SpringValidation

一、概述&#xff1a; ​ JSR 303中提出了Bean Validation&#xff0c;表示JavaBean的校验&#xff0c;Hibernate Validation是其具体实现&#xff0c;并对其进行了一些扩展&#xff0c;添加了一些实用的自定义校验注解。 ​ Spring中集成了这些内容&#xff0c;你可以在Spri…