gpt4 book ai didi

c++ - Qt 中 `:/foo` 、 `qrc:/foo` 和 `qrc:///foo` 路径之间的区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:42:45 25 4
gpt4 key购买 nike

此代码成功:

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

此代码打印“失败”:

QFile file("qrc:/main.qml");
if ( file.open(QIODevice::ReadOnly) ) {
cout << "success" << endl;
} else {
cout << "failure" << endl;
}

将 QFile 构造函数参数更改为 qrc:///main.qml(如 Qt documentation 中所示)并没有修复它。将其更改为 :/main.qml 使其打印“成功”。

所以我对何时使用这 3 种形式感到困惑。

最佳答案

如您的 link 中所述,:/main.qml是一个文件路径,而qrc:/main.qml是一个url。

前者可用于需要文件路径的地方——基本上是一个 QString,就像 QFile 构造函数一样。

后者可以在需要 url 的地方使用,比如 QQmlApplicationEngine::load through QUrl。它不能与需要路径的 QFile 构造函数一起使用。

关于qrc:///,一个简化的url语法(没有查询,用户/密码,也没有端口)可以是:

scheme:[//host][/]path

如果您跳过 host 部分,则可能导致 scheme:/path,如果您指定 ,则可能导致 scheme:///path >host 为空字符串。来自 RFC 3986 :

For example, the "file" URI scheme is defined so that no authority, an empty host, and "localhost" all mean the end-user's machine, whereas the "http" scheme considers a missing authority or empty host invalid.

看起来 Qt 的开发人员在设计他们的 qrc 方案时遵循了 file 方案的规则。毕竟,这里的资源只是“最终用户机器上”的文件(实际上,在最终用户机器上的可执行文件中)。所以qrc:/main.qmlqrc:///main.qml只是同一个url的两种写法。

参见 here完整的 url 语法。

关于c++ - Qt 中 `:/foo` 、 `qrc:/foo` 和 `qrc:///foo` 路径之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39701903/

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