QML小白之加载qml文件方法入门

前言

虽然做QT开发一直使用的是QWidget,但是了解QML也有一段时间了,加之以前做过Javascript开发几个月时间,对Javascript有一定的基础,最近一直想学习下QML相关内容。
QML内容之多,想入门得有个契入点,我选择了*.qml文件的加载方式,对此做了个基本尝试。


一、qml加入qrc资源文件

如果不考虑发布后qml文件修改,能不用重新打包生效qml文件里面的改动,可以考虑把qml加入qrc资源文件,编译的时候就在.exe里。

二、动态加载qml

1.QtQuick工程

代码如下(示例):

    QQmlApplicationEngine engine;
    const QUrl url(QUrl::fromLocalFile(QCoreApplication::applicationDirPath() + "\\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);

2.QWidget工程

代码如下(示例):

.pro文件里记得添加

QT += widgets quickwidgets qml quick

.cpp里添加
#include<QQuickWidget>
#include <QDir>
#include <QUrl>

    QDir::setCurrent(QCoreApplication::applicationDirPath()); // 把程序运行目录设置为当前目录
    
    QQuickWidget* viewer = new QQuickWidget(this);

    viewer->move(100, 100);
    viewer->resize(300, 300);
    viewer->setResizeMode(QQuickWidget::SizeRootObjectToView);
    QUrl url(QUrl::fromLocalFile("pop.qml"));
    viewer->setSource(url);            // 是以Shadow的第一层目录为基点

    viewer->show();
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12

Rectangle {
    visible: true
    width: 1000
    height: 480

	Button {
		x: 10
		y: 10
		text: "Ok"
		onClicked: console.log("OK Button clicked....")
	}

	Button {
		x: 100
		y: 100
		text: "Cancel"
		onClicked: console.log("Cancel Button clicked....")
	}
}

该处使用的pop.qml文件里的内容就可以在打包exe后还可以编辑,且能及时生效,不用再打包exe。


3.打包exe

在这里插入图片描述

windeployqt *.exe -qmldir “源码路径”
以上就是今天要讲的内容,本文重点介绍了如何让exe和qml文件分离,即打包出exe后,还可以根据需要改变qml文件,不用重新打包exe,也可以让改动生效。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值