开源 C++ QT QML 开发(二)工程结构

文章的目的为了记录使用QT QML开发学习的经历。开发流程和要点有些记忆模糊,赶紧记录,防止忘记。

相关链接:

开源 C++ QT QML 开发(一)基本介绍

开源 C++ QT QML 开发(二)工程结构

开源 C++ QT QML 开发(三)常用控件

开源 C++ QT QML 开发(四)复杂控件--Listview

开源 C++ QT QML 开发(五)复杂控件--Gridview

推荐链接:

开源 C# 快速开发(一)基础知识

开源 C# 快速开发(二)基础控件

开源 C# 快速开发(三)复杂控件

开源 C# 快速开发(四)自定义控件--波形图

开源 C# 快速开发(五)自定义控件--仪表盘

开源 C# 快速开发(六)自定义控件--圆环

开源 C# 快速开发(七)通讯--串口

开源 C# 快速开发(八)通讯--Tcp服务器端

开源 C# 快速开发(九)通讯--Tcp客户端

开源 C# 快速开发(十)通讯--http客户端

开源 C# 快速开发(十一)线程

开源 C# 快速开发(十二)进程监控

开源 C# 快速开发(十三)进程--管道通讯

开源 C# 快速开发(十四)进程--内存映射

开源 C# 快速开发(十五)进程--windows消息

开源 C# 快速开发(十六)数据库--sqlserver增删改查

本章节主要内容是:创建QML工程,介绍工程的组成,基本调试等。

1.工程创建

2.编译调试

3.工程组成

一、工程创建

选中Qt Quick Application就是qml

输入工程名

后面的步骤全部下一步,就创建了工程

二、编译调试

设置以后出现编译和调试按钮

默认的调试文件夹随机,需要设置编译调试文件夹到工程文件夹

去掉勾选,编译文件夹会放到工程文件夹中。

成功运行

编译文件夹也在工程目录中

添加断点进行调试

三、工程组成

pro/

├── pro.pro

├── main.cpp

├── main.qml

├── resources.qrc

└── (其他资源文件)

.pro 文件 (Qt Project File)

这是 Qt 的工程文件 ,用于 qmake 构建系统。它告诉 Qt 如何编译和链接你的项目。当你打开一个 QML 项目时,通常首先在 Qt Creator 中打开这个 .pro 文件。

复制代码
QT += quick

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Refer to the documentation for the
# deprecated API to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
        main.cpp

RESOURCES += qml.qrc

# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =

# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
.qrc 文件 (Qt Resource Collection File)

这是一个 XML 格式的资源文件 ,用于将你的 QML 文件、图片、字体等资源编译进最终的可执行文件中。这样做的好处是发布应用时不需要携带一堆零散的文件,所有资源都内置于一个二进制文件中。

复制代码
<RCC>
    <qresource prefix="/">
        <file>main.qml</file>
    </qresource>
</RCC>
main.cpp (C++ 入口点)

这是整个应用程序的 C++ 入口函数。即使是纯 QML 应用,也需要一个简短的 C++ 文件来启动 QML 引擎并加载主 QML 文件。

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

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    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();
}
主 QML 文件 (通常是 main.qml)

这是应用程序启动时加载的根组件。它通常是整个应用窗口的顶层容器。

复制代码
import QtQuick 2.14
import QtQuick.Window 2.14
import QtQuick.Controls 2.14
import QtQuick.Layouts 1.14

ApplicationWindow {
    id: window
    width: 800
    height: 600
    visible: true
    title: qsTr("My QML Application - Qt 5.14.2")

    // 添加一个简单的测试组件
    Rectangle {
        anchors.centerIn: parent
        width: 200
        height: 100
        color: "lightblue"
        border.color: "blue"
        radius: 10

        Text {
            anchors.centerIn: parent
            text: qsTr("Hello Qt 5.14.2!")
            font.pixelSize: 16
            color: "darkblue"
        }

        MouseArea {
            anchors.fill: parent
            onClicked: {
                console.log("Rectangle clicked!");
                parent.color = parent.color === "lightblue" ? "lightgreen" : "lightblue";
            }
        }
    }

    // 状态栏
    footer: Label {
        text: qsTr("Application is running successfully!")
        padding: 10
    }
}
相关推荐
fengyehongWorld3 小时前
TeraTerm ttl脚本登录wsl
linux·teraterm
乌托邦的逃亡者3 小时前
Linux中如何检测IP冲突
linux·运维·tcp/ip
一曦的后花园4 小时前
linux搭建promethes并对接node-exporter指标
linux·运维·服务器
乌托邦的逃亡者4 小时前
CentOS/Openeuler主机中,为一个网卡设置多个IP地址
linux·运维·网络·tcp/ip·centos
念恒123065 小时前
进程控制---自定义Shell
linux·c语言
风曦Kisaki5 小时前
# Linux Shell 编程入门 Day02:条件测试、if 判断、循环与随机数
linux·运维·chrome
李日灐5 小时前
< 6 > Linux 自动化构建工具:makefile 详解 + 进度条实战小项目
linux·运维·服务器·后端·自动化·进度条·makefile
嵌入式×边缘AI:打怪升级日志6 小时前
嵌入式Linux开发:开源组件、第三方库与许可证详解
linux
计算机安禾6 小时前
【Linux从入门到精通】第34篇:搭建FTP与Samba——跨平台文件共享解决方案
linux·运维·服务器
日取其半万世不竭6 小时前
用 Netdata 实时监控服务器,比 Prometheus + Grafana 轻量得多
linux·服务器·网络·系统架构·负载均衡·zabbix·grafana