2012-01-17 28 views
7

Necesito mostrar una cadena en una pantalla de simulación. Para eso, se supone que debo leer el texto de un archivo existente Filename.txt/Filename.csv. El parámetro de texto se actualiza como se muestra en el siguiente fragmento de código. Necesito acceder a la cadena desde un archivo de texto y usarlo en el elemento MarqueeText. La cadena Accesada se utilizará en el campo texto del elemento MarqueeText.Leer una línea desde un archivo .txt o .csv en qml (Qt Quick)

MarqueeText { 
    id:scrolltext 
    width: 255 
    height: 48 
    anchors.verticalCenter: parent.horizontalCenter 
    text: //i need to access the string in text file to be displayed 
} 

Por favor, ayúdenme con esto. Gracias.

+0

favor ir y revisar las preguntas que has realizado previamente. Si alguien ha respondido tu pregunta, marca la respuesta. Si nadie ha respondido, edite su pregunta para que responda. –

+0

@ Styne666 ¿Hay algún problema para responder a esta pregunta? Eliminé algunas de las preguntas porque son demasiado viejas para responder. Ahora está bien? – Rahul

+0

Bueno, ¿por qué querrían las personas responder sus preguntas si nunca marca sus respuestas como correctas? No estoy entrando en una discusión sobre cómo usar este sitio. Vaya y lea todo [Preguntas frecuentes] (http://stackoverflow.com/faq) ** ahora **, en su totalidad, hasta que obtenga la [Insignia analítica] (http://stackoverflow.com/badges/1306/ analítico). –

Respuesta

11

Siga la página wiki para leer sobre el acceso a archivos en QML. Nokia Wiki Foro http://web.archive.org/web/20150227025348/http://developer.nokia.com/community/wiki/Reading_and_writing_files_in_QML

Resumen:

crear un tipo de QML encargo, FileIO:

fileio.h

#ifndef FILEIO_H 
#define FILEIO_H 

#include <QObject> 

class FileIO : public QObject 
{ 
    Q_OBJECT 

public: 
    Q_PROPERTY(QString source 
       READ source 
       WRITE setSource 
       NOTIFY sourceChanged) 
    explicit FileIO(QObject *parent = 0); 

    Q_INVOKABLE QString read(); 
    Q_INVOKABLE bool write(const QString& data); 

    QString source() { return mSource; }; 

public slots: 
    void setSource(const QString& source) { mSource = source; }; 

signals: 
    void sourceChanged(const QString& source); 
    void error(const QString& msg); 

private: 
    QString mSource; 
}; 

#endif // FILEIO_H 

fileio.cpp

#include "fileio.h" 
#include <QFile> 
#include <QTextStream> 

FileIO::FileIO(QObject *parent) : 
    QObject(parent) 
{ 

} 

QString FileIO::read() 
{ 
    if (mSource.isEmpty()){ 
     emit error("source is empty"); 
     return QString(); 
    } 

    QFile file(mSource); 
    QString fileContent; 
    if (file.open(QIODevice::ReadOnly)) { 
     QString line; 
     QTextStream t(&file); 
     do { 
      line = t.readLine(); 
      fileContent += line; 
     } while (!line.isNull()); 

     file.close(); 
    } else { 
     emit error("Unable to open the file"); 
     return QString(); 
    } 
    return fileContent; 
} 

bool FileIO::write(const QString& data) 
{ 
    if (mSource.isEmpty()) 
     return false; 

    QFile file(mSource); 
    if (!file.open(QFile::WriteOnly | QFile::Truncate)) 
     return false; 

    QTextStream out(&file); 
    out << data; 

    file.close(); 

    return true; 
} 

registrar el nuevo tipo de QML:

#include "fileio.h" 

Q_DECL_EXPORT int main(int argc, char *argv[]) 
{ 
    ... 
    qmlRegisterType<FileIO, 1>("FileIO", 1, 0, "FileIO"); 
    ... 
} 

real QML Uso:

import QtQuick 1.1 
import FileIO 1.0 

Rectangle { 
    width: 360 
    height: 360 
    Text { 
     id: myText 
     text: "Hello World" 
     anchors.centerIn: parent 
    } 

    FileIO { 
     id: myFile 
     source: "my_file.txt" 
     onError: console.log(msg) 
    } 

    Component.onCompleted: { 
     console.log("WRITE"+ myFile.write("TEST")); 
     myText.text = myFile.read(); 
    } 
} 
+0

gracias por el enlace. Realmente me ayudó. ¿Es posible verificar cuándo se creó el archivo? ¿Hay alguna propiedad que lo diga? – SoH

+0

[QFileInfo :: created()] (http://qt-project.org/doc/qt-4.8/qfileinfo.html#created) Esta función le dará la información del archivo. Pero espero que todavía dependa del sistema operativo subyacente. Puede usar esta función en su clase FileIO para devolver los datos requeridos. – RajaRaviVarma

+0

Recibo el siguiente error: 'FileIO' en el espacio de nombres no registrado 'FileIO'. ¿Cómo resolver esto? Gracias –

Cuestiones relacionadas