我在QString中存储Windows中的文件路径时遇到问题。我正在使用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的第一个标志?我应该如何在与代码相同的文件夹中写入文件的路径?
提前致谢!
答案 0 :(得分:2)
您使用的资源路径样式暗示文件frog.bmp位于资源文件中。因此,您需要在运行时解析bmp文件的路径,或者需要将资源文件添加到项目中。
如果您使用UI设计器,则会自动处理资源文件的概念,但如果您想通过代码访问资源,则需要执行一些操作。
首先创建一个资源文件。在视觉工作室(使用视觉工作室插件)中,有一个向导可以执行此操作。本质上它只是一个扩展名为.qrc的xml文件,如下所示:
<RCC>
<qresource prefix="/images">
<file>frogger.bmp</file>
</qresource>
</RCC>
现在必须在构建期间处理此文件。如果您使用过.ui文件,则类似。有一个名为“rcc.exe”的工具,它将qrc文件作为输入并生成一个需要编译并与项目链接的.cpp文件。
如果您正在使用可视工作室并拥有Qt Visual Studios插件,那么当您将qrc文件添加到项目时,这一切都应该为您处理。
如果你正在使用QMake,那么你的pri文件应该包含一个“RESOURCES”部分,你需要列出你的qrc文件:
RESOURCES += yourqrcfile.qrc
现在,一旦完成。您可以在代码中访问您的资源。您对QFile :: exists的调用应解析文件名。
如果您将资源放在静态库或共享库中,则需要在类中添加以下行以确保加载资源文件。
Q_INIT_RESOURCE(yourqrcfile); // do not include the extension, just the name of the file.
以下是一些更详细解释事情的链接: