Чтение строки из файла .txt или .csv в qml (Qt Quick)

Мне нужно отобразить строку на экране моделирования. Для этого я должен прочитать текст из существующего файла Filename.txt/Filename.csv. Текстовый параметр обновляется, как показано в приведенном ниже фрагменте кода. Мне нужно получить доступ к строке из текстового файла и использовать ее в элементе MarqueeText. Строка Accessed должна использоваться в поле text элемента MarqueeText.

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

Пожалуйста, помогите мне с этим. Спасибо.


person Rahul    schedule 17.01.2012    source источник


Ответы (1)


Следуйте странице вики, чтобы прочитать о доступе к файлам в QML. Вики-форум Nokia http://web.archive.org/web/20150227025348/http://developer.nokia.com/community/wiki/Reading_and_writing_files_in_QML

Резюме:

Создайте собственный тип QML, 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;
}

Зарегистрируйте новый тип QML:

#include "fileio.h"

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

Фактическое использование QML:

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();
    }
}
person RajaRaviVarma    schedule 18.01.2012
comment
спасибо за ссылку. Действительно помог мне. Можно ли проверить, когда был создан файл? Есть ли какое-то свойство, которое говорит об этом? - person SoH; 07.08.2012
comment
QFileInfo::created() Эта функция даст вам информация о файле. Но я надеюсь, что это все еще зависит от базовой ОС. Вы можете использовать эту функцию в своем классе FileIO для возврата необходимых данных. - person RajaRaviVarma; 07.08.2012
comment
Я получаю следующую ошибку: «FileIO» в незарегистрированное пространство имен «FileIO». Как это решить? Спасибо - person Ranjit Kumar; 06.06.2017
comment
@RanjitKumar Пожалуйста, опубликуйте полное сообщение об ошибке вместе с вашим кодом, используя pastebin или что-то в этом роде. Без этих деталей я не могу помочь. - person RajaRaviVarma; 06.06.2017