2013-07-30 73 views
0

我在QString中存储Windows文件的路径时遇到问题。我正在用C++来使用Qt。Qt:QString中的文件路径

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的第一个标志?我应该如何在与代码相同的文件夹中写入文件路径?

在此先感谢!

+2

随着'%s'格式说明,'qDebug'需要一个空终止ASCII字符串但'QString :: data()'返回一个指向字符串的UTF-16表示的指针。你应该使用'qDebug(“...%s”,resourcePath.toLatin1()。data());'来代替。 – alexisdm

+0

如果将resourcePath设置为完整路径,由于任何原因它们之间不可能发生变化,exists()将接受const引用。正如alexisdm指出的那样,这可能是您的qdebug()行的问题。 (虽然我建议使用'qPrintable(resourcePath)') –

回答

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文件应包含一个“资源”部分,在那里你需要列出你的QRC文件是这样的:

RESOURCES += yourqrcfile.qrc 

现在,一旦做到这一点。您可以通过代码访问您的资源。你对QFile :: exists的调用应该解析文件名。

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

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

这里有解释的东西更详细的几个环节:

Creating a resource file in Qt Creator

Explaining how resource files work

+0

非常感谢!但不幸的是,这并没有解决我的问题......我仍然得到***错误 - 找不到资源路径:: – speedyTeh

+0

两件事......如果您准确地复制了我的资源文件,在您的情况下,您应该将第2行更改为“我改变了我的答案 - 对此感到遗憾。另外,我在前几天看到资源路径必须在”:/images/frogger.bmp“之前有”qrc“使其成为“qrc:/images/frogger.bmp”。我从来没有这样做过,但你也可以尝试。 – Liz