中核工建设集团OA网站,用什么程序做视频网站,深圳朝阳电子网站建设,企业宣传片不同版本QT使用qmake时创建QML项目的区别 文章目录 不同版本QT使用qmake时创建QML项目的区别一、QT5新建QML项目1.1 目录结构1.2 .pro 文件内容1.3 main.cpp1.4 main.qml 二、QT6新建QML项目2.1 目录结构2.2 .pro文件内容2.3 main.cpp2.4 main.qml 三、两个版本使用资源文件的区…不同版本QT使用qmake时创建QML项目的区别 文章目录 不同版本QT使用qmake时创建QML项目的区别一、QT5新建QML项目1.1 目录结构1.2 .pro 文件内容1.3 main.cpp1.4 main.qml 二、QT6新建QML项目2.1 目录结构2.2 .pro文件内容2.3 main.cpp2.4 main.qml 三、两个版本使用资源文件的区别3.1 QT5添加资源文件3.2 QT6添加资源文件3.3 使用资源文件 四、总结 对于高版本的QT如果想要创建使用qmake构建需要选择compat如下图所示但是指定不同的最小QT版本时项目的默认结构会有不同。本文通过对QT5和QT6两种版本的默认项目进行分析确定不同QT版本下怎么进行资源的管理。
一、QT5新建QML项目
选择最小的Qt版本为5.15如下图
1.1 目录结构 1.2 .pro 文件内容
QT quick# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES QT_DISABLE_DEPRECATED_BEFORE0x060000 # disables all the APIs deprecated before Qt 6.0.0SOURCES \main.cppRESOURCES qml.qrc # Additional import path used to resolve QML modules in Qt Creators 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默认创建qml.qrc文件并追加到RESOURCES使用qml.qrc统一管理资源文件.qrc文件中需要为每个资源指定一个前缀在使用资源文件时要以指定的前缀开头利用前缀可以方便对资源进行分组管理等。以资源编辑器方式打开qml.qrc文件时如下所示可以发现资源文件的默认前缀为/。 新建的.qml文件会默认添加到.qrc文件中 添加后的目录为 注意在QT5版本的项目中添加QML文件时一定要选择添加到默认的.qrc文件中如果选择添加到qt5_project.pro文件中会像QT6版本的项目一样只在.pro文件中向DISTFILES字段追加新建的QML文件。具体情况请参见下面的QT6新建QML文件。
1.3 main.cpp
#include QGuiApplication
#include QQmlApplicationEngineint main(int argc, char *argv[])
{
#if QT_VERSION QT_VERSION_CHECK(6, 0, 0)QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endifQGuiApplication 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();
}相比于QT6的版本main.cpp文件中多了个低版本情况下启用高DPI下屏幕自适应的设置
1.4 main.qml
import QtQuick 2.15
import QtQuick.Window 2.15Window {width: 640height: 480visible: truetitle: qsTr(Hello World)
}QT5的QML中导入模块时需要指明模块的版本
二、QT6新建QML项目
选择最小的Qt版本为5.15如下图
2.1 目录结构 2.2 .pro文件内容
QT quickSOURCES \main.cppresources.files main.qml
resources.prefix /$${TARGET}
RESOURCES resources # Additional import path used to resolve QML modules in Qt Creators 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默认使用resources管理资源文件resources变量也需要追加到RESOURCES变量该变量有两个成员 resources.files保存所有资源文件的列表resources.prefix表示使用资源文件时的前缀名这和QT5的.qrc文件中的前缀名相对应 新建的.qml文件时默认只会将新文件追加在.pro文件中的DISTFILES字段中 .pro文件变为 添加后的目录结构为 注意这时如果想要使用新建的.qml文件会报QQmlApplicationEngine failed to load component错因为DISTFILES并不能告诉编译器新建了资源文件如果想要正常使用需要将资源文件的名字追加到resoures.file后 实际上DISTFILES一般的用途为指明make编译时需要添加到dist目标中的文件我们可以将其中指定的.qml文件删除掉并不影响程序的运行 最后的.pro文件如下图所示
2.3 main.cpp
#include QGuiApplication
#include QQmlApplicationEngineint main(int argc, char *argv[])
{QGuiApplication app(argc, argv);QQmlApplicationEngine engine;const QUrl url(uqrc:/qt6_project/main.qml_qs);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();
}2.4 main.qml
import QtQuickWindow {width: 640height: 480visible: truetitle: qsTr(Hello World)
}QT6中移除了QML版本控制所以导入模块时不再需要指定版本号
三、两个版本使用资源文件的区别
此时向两个项目中都添加一个images文件夹并向其中添加一张图片qt.png目录结构分别变为
资源文件需要先添加到项目中才可以使用由于在两个版本中管理资源文件的方式并不相同所以添加资源文件的方式也不同。
3.1 QT5添加资源文件
QT5默认使用.qrc管理资源文件因此应该使用.qrc文件专门管理图片资源参考——Qt 资源系统Qt Resource System。
由于本文主要对比两个版本的差异这里直接右键qml.qrc将qt.png添加到qml.qrc文件中如下所示
选择qt.png后项目目录结构变为
3.2 QT6添加资源文件
由于QT6默认在.pro文件中使用resources变量管理资源文件所以添加资源时直接将资源文件追加到resources.file后即可如下 追加后项目目录结构变为
3.3 使用资源文件
尽管在QT6版本中默认情况下将资源的管理方式修改为了使用resources变量但是通过编译时的执行过程可以发现实际还是会生成一个qmake_resources.qrc文件如下所示
实际应该还是通过.qrc进行资源管理所以在这两种方式下使用资源文件的方式是相同的。
根据官方文档的描述在使用图片时有两种形式。以上面的QT5项目为例使用图片的方式为
相对路径Image {id: imgsource: images/qt.png
}绝对路径Image {id: imgsource: qrc:/images/qt.png
}注意QT6项目的资源文件的默认前缀是/$${TARGET}其中$${TARGET}表示TARGET变量的值默认情况下TARGET的值和.pro文件名相同。
所以在以上创建的QT6项目中使用资源文件时需要添加的前缀就是/qt6_project这从main.cpp文件里加载main.qml中也有体现
因此在上面的QT6项目中使用图片的两种方式为
相对路径Image {id: imgsource: qt6_project/images/qt.png
}绝对路径Image {id: imgsource: qrc:/qt6_project/images/qt.png
}四、总结
QT5和QT6创建使用qmake编译的QML项目时资源管理的方式不同 QT5使用.qrc文件管理资源QT6使用resources变量管理资源 两个版本中资源的使用方式不同 QT5中创建qml文件时默认添加到.qrc文件中可以直接使用QT6中需要将新的资源文件qml文件和图片等手动追加到resources变量后才能使用 以上区别是创建不同QT版本项目时的默认设置实际中两种方式都可以用来管理资源。即 可以在QT6版本项目中手动创建.qrc文件管理资源可以在QT5版本项目中使用resources变量管理资源