0

我在将 Windows 中的文件路径存储在 QString 中时遇到问题。我将 Qt 与 C++ 一起使用。

QString resourcePath = ":/images/frog.bmp";
if( ! QFile::exists(resourcePath) )
{
    qDebug("*** Error - Resource path not found : %s",   resourcePath.data());
}

此代码结果如下:

*** Error - Resource path not found : :

所以我可以看到 resourcePath.data()) 只包含“:”。我认为问题出在斜杠上,所以我尝试用“\”更改“/”,但结果是一样的。

但如果我写:

QString resourcePath = "C:\\Users\\Boris\\Desktop\\Frogger3\\images\\frog.bmp";

一切正常。我错过了什么?冒号不能成为 QString 中的第一个符号有什么原因吗?我应该如何在与代码相同的文件夹中写入文件的路径?

提前致谢!

4

1 回答 1

2

您使用的资源路径样式暗示文件 frog.bmp 位于资源文件中。所以要么你需要在运行时解析bmp文件的路径,要么你需要在你的项目中添加一个资源文件。

如果您使用 UI 设计器,资源文件的概念会自动处理,但如果您想通过代码访问资源,则需要做一些事情。

首先创建一个资源文件。在视觉工作室(使用视觉工作室插件)中有一个向导可以做到这一点。本质上它只是一个扩展名为 .qrc 的 xml 文件,看起来像这样:

<RCC>
    <qresource prefix="/images">
        <file>frogger.bmp</file>
    </qresource>
</RCC>

现在必须在构建期间处理此文件。如果您使用过 .ui 文件,则类似。有一个名为“rcc.exe”的工具,它将 qrc 文件作为输入并生成需要编译并与您的项目链接的 .cpp 文件。

如果您使用的是 Visual Studio 并拥有 Qt Visual Studios 插件,那么当您将 qrc 文件添加到项目中时,这一切都应该为您处理。

如果您使用的是 QMake,那么您的 pri 文件应该包含一个“资源”部分,您需要在其中列出您的 qrc 文件,例如:

RESOURCES += yourqrcfile.qrc

现在,一旦完成。您可以在代码中访问您的资源。您对 QFile::exists 的调用应该解析文件名。

如果您将资源放在静态或共享库中,则需要将以下行添加到您的类中以确保加载资源文件。

Q_INIT_RESOURCE(yourqrcfile);  // do not include the extension, just the name of the file.

以下是一些更详细地解释事情的链接:

在 Qt Creator 中创建资源文件

解释资源文件的工作原理

于 2013-07-31T00:22:38.490 回答