【QML】在main.qml 文件中引入自定义 qml 文件

17 篇文章 7 订阅
本文介绍了如何在QtQML项目中使用resource.qrc管理通用参数,并通过C++工程的CMakeLists.txt配置和main.cpp进行测试,展示了如何导入和使用CommonParam.qml文件以实现参数的统一调整。
摘要由CSDN通过智能技术生成

在设计 qml 界面时,我想把一组通用参数单独保存到一个自定义的 qml 文件中,方便参数统一调整。使用的 qrc 统一管理这些 qml 文件。

  • 工程搭建:cmake 3.29 (cmake 引入qml 的环境搭建可参考:cmake 引入 qml
  • 编译平台:Clion
  • 工程结构:


目录

一、QML 文件管理

1、resource.qrc

2、CommonParam.qml

3、mainwindow.qml

二、C++ 工程搭建及测试

1、CMakeLists.txt

2、main.cpp(测试)


一、QML 文件管理

1、resource.qrc

.qrc 文件是 Qt 中用于管理资源文件的一种方式,它可以将项目中用到的资源文件,如图片、QML 文件、样式表等,打包到一个二进制文件中,方便在程序中进行管理和使用。

  • <qresource> 可以看做是一个资源集合,prefix 则是为这类集合所起的名字。
  • <file> 记录当前资源集合中的具体文件的相对路径(相对于 qrc 文件)
<RCC>
    <qresource prefix="/qml">
        <file>mainwindow.qml</file>
         <!-- common/CommonParam.qml 表示common目录下的CommonParam.qml文件 -->
        <file>common/CommonParam.qml</file>
    </qresource>
    <!--
    <qresource prefix="/image">
        <file>background.png</file>
    </qresource>
    -->
</RCC>

2、CommonParam.qml

这是保存一些公共参数的文件。

import QtQuick 2.0

QtObject {
    property int inputWidth: 200
    property int inputHeight: 50
}

3、mainwindow.qml

这是窗口显示文件,我们将在这个文件中引入 CommonParam.qml。qml 文件可类比于 C++ 中的类,需要先引入,然后再实例化。

第一步是通过 import 引入 CommonParam.qml 所在目录。url 格式如下,表示通过 qrc 访问 <prefix> 类别下的 <file> 文件。

qrc: <prefix>/<file>

import 引入的是目录,而并非文件,因此具体引入方式如下:

// 访问路径: qrc:/qml/common/CommonParam.qml 
import "qrc:/qml/common"

第二步是实例化。qml 文件可类比于 C++ 中的类,现在 qrc 可以找到对应的 qml 文件,实际使用需要将其实例化。实例化的对象名为 commonParam,可以在当前文件中的任意位置通过对象名访问 commonParam 内部的属性。

CommonParam {
    id: commonParam
}

Rectangle {
    id: rect
    width: commonParam.width
    height: commonParam.height
}

完整示例:

import QtQuick 2.2
import QtQuick.Controls 1.2
import "qrc:/qml/common"

ApplicationWindow {
    width: 1200
    height: 800
    visible: true

    CommonParam {
        id: commonParam
    }

    Rectangle {
        id: rect
        width: commonParam.width
        height: commonParam.height
    }
}

二、C++ 工程搭建及测试

1、CMakeLists.txt

具体内容参考搭建QML环境时的CMakeLists.txt,需要改动的地方是,qrc 文件的位置。

2、main.cpp(测试)

mainwindow.qml 需要借助 C++ 主函数来运行。

#include <QtWidgets/QApplication>
#include <QtQml/QQmlApplicationEngine>

int main(int argc, char** argv)
{
    QApplication app(argc, argv);
	QQmlApplicationEngine engine;

	// 加载QML文件(加载主窗口)
    // 格式: qrc: + <prefix> + <file>
    // <prefix>: 自主分类,如/qml 表示qml文件,/image 表示图片资源
    // <file>: qml文件的相对路径(相对于qrc文件)
	engine.load(QUrl(QStringLiteral("qrc:/qml/mainwindow.qml")));
	if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec();
}
  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值