为什么将“:/Icons/controller.png”提供给构造函数有效(这是有效的相对文件路径语法)?
Why does giving ":/Icons/controller.png" to a constructor work (is that valid relative filepath syntax)?
情况的细节并不重要,但特别是我正在从 .png 文件中创建 QIcon 对象(Qt 库的一部分)。此构造函数采用一个字符串,该字符串应该是文件路径
我发现,我可以简单地向构造函数提供类似 ":/Icons/controller.png"
的内容,而不是使用绝对路径,并且仍然可以正确检索和显示图标。
我的项目很大,所以我不会写出层次结构以及文件相对于其他所有内容的位置,但它们至少相隔 3 度。因此,我认为存在某种我不知道的文件搜索机制。谁能猜出这是怎么回事?
:/
路径是Qt Resource System.
中的路径
您有一个已编译并与您的可执行文件捆绑在一起的 QRC 文件。它引用了图像。
例如你的 qrc 文件包含这个:
<RCC version="1.0">
<qresource>
<file>Icons/controller.png</file>
</qresource>
</RCC>
然后使用 RCC 编译器在构建过程中对其进行编译。该文件随后与您的 exe 链接。
默认资源是自动注册的,但您也可以将资源编译成外部RCC包,并在运行时使用QResource::registerResource("/path/to/myresource.rcc");
加载它们
情况的细节并不重要,但特别是我正在从 .png 文件中创建 QIcon 对象(Qt 库的一部分)。此构造函数采用一个字符串,该字符串应该是文件路径
我发现,我可以简单地向构造函数提供类似 ":/Icons/controller.png"
的内容,而不是使用绝对路径,并且仍然可以正确检索和显示图标。
我的项目很大,所以我不会写出层次结构以及文件相对于其他所有内容的位置,但它们至少相隔 3 度。因此,我认为存在某种我不知道的文件搜索机制。谁能猜出这是怎么回事?
:/
路径是Qt Resource System.
您有一个已编译并与您的可执行文件捆绑在一起的 QRC 文件。它引用了图像。
例如你的 qrc 文件包含这个:
<RCC version="1.0">
<qresource>
<file>Icons/controller.png</file>
</qresource>
</RCC>
然后使用 RCC 编译器在构建过程中对其进行编译。该文件随后与您的 exe 链接。
默认资源是自动注册的,但您也可以将资源编译成外部RCC包,并在运行时使用QResource::registerResource("/path/to/myresource.rcc");