Как включить текстовый файл в приложение qt?

У меня есть текстовый файл, из которого мне нужно получить данные по строкам. Поэтому, если мое приложение запущено, оно может читать из текстового файла, чтобы показать информацию. Но я не хочу предоставлять свой текстовый файл отдельно вместе с моим приложением. Как это сделать? И я должен сделать это с помощью Qt!

Я слышал, что использование xml будет лучшим и простым способом для этого.

Ответ 1

Вы должны добавить файл ресурсов qt (.qrc) в свой проект

Это может выглядеть так:

<RCC>
    <qresource prefix="/">
        <file>file.xml</file>
        <file>files/file2.xml</file>
    </qresource>
</RCC>

После этого вы должны добавить этот файл ресурсов в файл проекта (.pro)

Как это, например:

RESOURCES += myqrcfile.qrc

После этого вы можете использовать этот файл в своем коде с помощью символа ':' для ссылки на файл

Может быть, так:

QFile data(":/file.xml");
//or
QFile data(":/files/file2.xml");
//etc...

Помните, что путь, который вы определяете для файла (в qrc), должен также соответствовать расположению файла в файловой системе.

Надеюсь, что это поможет, для получения дополнительной информации я предлагаю вам прочитать ссылку на документацию, опубликованную Gorkem Ercan.

Ответ 3

Такой код работает в Qt 5.2:

QResource common(":/phrases/Resources/Phrases/Common.xml");

QFile commonFile(common.absoluteFilePath());

if (!commonFile.open(QIODevice::ReadOnly | QIODevice::Text))
{
    qDebug() << "Unable to open file: " << commonFile.fileName() << " besause of error " << commonFile.errorString() << endl;

    return;
}

QTextStream in(&commonFile);

QString content = in.readAll();

Ответ 4

Продолжение ответа ExplodingRat.

Использование QFile вроде этого не работает (по крайней мере, не в Qt 4.5), но вы можете использовать:

QResource r( ":/file.xml" );
QByteArray b( reinterpret_cast< const char* >( r.data() ), r.size() );