不同的':/foo ', ' qrc:/foo '和' qrc:///foo '路径在Qt
Difference between `:/foo`, `qrc:/foo` and `qrc:///foo` paths in Qt
代码成功:
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
下面的代码输出"failure":
QFile file("qrc:/main.qml");
if ( file.open(QIODevice::ReadOnly) ) {
cout << "success" << endl;
} else {
cout << "failure" << endl;
}
将QFile构造函数参数更改为qrc:///main.qml
(如在Qt文档中)并不能修复它。如果将其更改为:/main.qml
,则会显示"success"。
所以我对何时使用这三种形式感到困惑。
如您的链接所述,:/main.qml
是文件路径,而qrc:/main.qml
是url。
前者可用于需要文件路径的地方——基本上是QString
,就像QFile
构造函数一样。
后者可以在需要url的地方使用,比如QQmlApplicationEngine::load
到QUrl
。它不能与QFile
构造函数一起使用,当需要一个路径时。
关于qrc:///
,一个简化的url语法(不需要查询、用户/密码、端口)可以是:
scheme:[//host][/]path
如果跳过host
部分,则会导致scheme:/path
,如果将host
指定为空字符串,则会导致scheme:///path
。来自RFC 3986:
例如,文件"定义的URI方案使得没有权限,为空主机,和"localhost"all 表示最终用户的机器,而"http"Scheme认为缺少授权或空主机无效。
看起来Qt的开发人员在设计qrc
方案时遵循了file
方案的规则。毕竟,这里的资源只是终端用户机器上的文件。(实际上,在最终用户机器上的可执行文件中)。所以qrc:/main.qml
和qrc:///main.qml
只是两个相同url的文字。
相关文章:
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 仅让特定类'Fabric'构造类'Foo'及其所有子类的实例
- 反转C++ foo(MyClass &) vs foo(const MyClass &)
- CMake 错误 - 目标 foo INTERFACE_SOURCES属性包含在源目录中以前缀为前缀的路径
- 如何实现这个函数 foo.getSize().x.
- Clearing Class Foo with new(pFoo) Foo()
- 我想知道为什么"std::unique_ptr<int> foo(新 int)"是合法的,因为"std::<int>unique_ptr"要求输入参数类型应该是"int"?
- 使用 G++ 编译时"Undefined Refrence to Foo"
- XCode 警告"此处需要实例化变量'Singleton:<Foo>:_instance',但没有可用的定义
- foo(void) vs foo(void *)
- 没有用于调用 foo 的匹配函数
- 两种初始化有什么区别:Foo f();Foo f = Foo()
- 有没有办法删除传递给函数"foo(新对象())"的对象?
- QT QML:使用.qrc文件将SQLite数据库部署到Android不起作用
- Using QT .qrc File with Visual Studio Proj...?
- std::size_t 还是 std::vector<Foo>::size_type?
- 引用函数如何"int &foo();"工作?
- 为什么int foo()是右值,而int&foo()在这个例子中是左值?
- <<找不到运算符,尽管定义了 Foo 类型的右操作数,但该运算符仍采用类型为 Foo 的右侧操作数
- 不同的':/foo ', ' qrc:/foo '和' qrc:///foo '路径在Qt