Получение путей к файлам qrc в Qt

Я хочу знать, как получить доступ к путям файлов в файле 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];
}

где путь — это qlist, который впоследствии можно использовать для доступа к соответствующим изображениям.

4

Решение

Кажется, есть простой способ сделать это с помощью 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
1

Другие решения


По вопросам рекламы [email protected]