gpt4 book ai didi

qt - 如何使用 QtQuick 2 控件从资源加载 qml 文件

转载 作者:行者123 更新时间:2023-12-04 12:52:43 25 4
gpt4 key购买 nike

我已经创建了 Qt Quick 2 Controls 项目,添加了资源,将我的 qml 文件放在资源中,并为此文件添加了别名。现在我想知道,为什么下一个代码不能将 qml 文件作为主 qml 文件加载:

#include <QDebug>
#include <QFile>
#include <QByteArray>
#include "qtquick2controlsapplicationviewer.h"

int main(int argc, char *argv[]) {
Application app(argc, argv);

QString fileInResource(":main/mainQml");

QFile f(fileInResource);
if (!f.exists()) {
qDebug() << "No file";
} else {
f.open(QIODevice::ReadOnly);
qDebug() << f.readAll();
}

QtQuick2ControlsApplicationViewer viewer;
viewer.setMainQmlFile(fileInResource);
viewer.show();

return app.exec();
}

因为在使用QFile 的情况下,它会正确读取文件并输出整个文件,但是viewer 说:

file:///path/:main/mainQml:-1 File not found

QQmlComponent: Component is not ready Error: Your root item has to be a Window.`

如何让 viewer 加载我的 qml 文件?


UPD: 添加了最小的工作示例 -- download it here

最佳答案

问题出在

void QtQuick2ApplicationViewer::setMainQmlFile(const QString &file)

它使用

setSource(QUrl::fromLocalFile(d->mainQmlFile));

用于设置源,QUrl::fromLocalFile 弄乱了路径。只需将其更改为

setSource(QUrl(d->mainQmlFile));

一切正常。

更新:

在您的示例中,它实际上是 component.loadUrl(QUrl::fromLocalFile(d->mainQmlFile));,第 80 行。

关于qt - 如何使用 QtQuick 2 控件从资源加载 qml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20104514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com