2011-02-16 23 views
10

Tengo un archivo de texto del cual necesito obtener datos línea por línea. Entonces, si mi aplicación se inicia, puede leer el archivo de texto para mostrar la información. Pero no quiero suministrar mi archivo de texto por separado junto con mi solicitud. ¿Puede alguien darme una idea de cómo hacer esto? ¡Y bueno tengo que hacer esto usando Qt!¿Cómo incluyo un archivo de texto en una aplicación qt?

Escuché que usar xml será una mejor y más fácil manera de lograr esto.

por cierto gracias de antemano!

Respuesta

14

Hay que añadir un archivo de recursos qt (.qrc) a su proyecto

Se podría tener este aspecto:

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

Después de eso hay que añadir que el archivo de recursos al archivo de proyecto (.pro)

Así por ejemplo:

RESOURCES += myqrcfile.qrc 

Después de que pueda utilizar ese archivo en el código utilizando el carácter ':' para hacer referencia al archivo

Tal como esto:

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

Recuerde que el camino que defina para el archivo (en el QRC) debe corresponder a la ubicación del archivo en el sistema de archivos también.

Espero que esto ayude, para obtener más información, le sugiero que lea el enlace a la documentación que Gorkem Ercan publicó.

+0

¿Dónde se supone que debe colocar ese XML inicial? No hay un botón para simplemente agregar un archivo existente? – tarabyte

+0

@tarabyte Hay En el menú: Archivo -> Nuevo -> [Archivos y clases] Qt -> Qt resource file – Bugfinger

7

Qt Resource System es lo que estás buscando.

+0

puede darle me un ejemplo o algo así para usar este QResource? ¡No encuentro en ningún programa de ejemplo en hwo para usar este material! :( – defiant

+2

@oDx http://doc.qt.nokia.com/latest/mainwindows-application.html – graphite

3

Continuando con la respuesta de ExplodingRat.

Usando QFile como eso no funciona (al menos no en Qt 4.5), pero se puede utilizar:

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

Tal código funciona en el 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(); 
+1

Funciona como un amuleto. ¡Gracias! –

Cuestiones relacionadas