我想知道如何访问qrc文件中的文件路径,以便将它们用作数组中的字符串。qrc文件的一个例子是:
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="">
<file>images/1.jpg</file>
<file>images/2.jpg</file>
<file>images/3.jpg</file>
<file>images/4.jpg</file>
</qresource>
</RCC>
我想以以下方式使用它:
for(int i=0;i<4;i++)
{
path=image_path[i];
}
其中path是一个qlist,以后可以用来访问相应的图像。
似乎有一种使用QDirIterator的简单方法。
如果当前工作目录中有一个名为":"的目录,并且您希望在将来解析该目录,则可能会中断。无论如何,现在不应该担心。
QStringList imageFileList;
QDirIterator dirIterator(":", QDirIterator::Subdirectories);
while (dirIterator.hasNext()) {
QFileInfo fileInfo = it.fileInfo();
if (fileInfo.isFile()) // Do not add directories to the list
imageFileList.append(it.next());
}
或者,这需要相当多的参与,但我认为它是有效的。恐怕没有比这更方便的写法了。
main.qrc
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="">
<file>images/1.jpg</file>
<file>images/2.jpg</file>
<file>images/3.jpg</file>
<file>images/4.jpg</file>
</qresource>
</RCC>
main.cpp
#include <QXmlStreamReader>
#include <QString>
#include <QFile>
#include <QTextStream>
int main()
{
QTextStream standardOutput(stdout);
QFile file("main.qrc");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
standardOutput << "File open error:" << file.errorString() << "n";
return 1;
}
QXmlStreamReader inputStream(&file);
while (!inputStream.atEnd() && !inputStream.hasError()) {
inputStream.readNext();
if (inputStream.isStartElement()) {
QString name = inputStream.name().toString();
if (name == "file")
standardOutput << "file: :/" << inputStream.readElementText() << "n";
}
}
return 0;
}
main.pro
TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp
构建并运行
qmake && make && ./main
输出file: :/images/1.jpg
file: :/images/2.jpg
file: :/images/3.jpg
file: :/images/4.jpg