4

配列内の文字列として使用するために、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 です。

4

1 に答える 1

1

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
于 2014-05-24T11:15:01.137 に答える