从 qml 中的 .txt 或 .csv 文件中读取一行(Qt Quick) [英] Reading a line from a .txt or .csv file in qml (Qt Quick)

查看:67
本文介绍了从 qml 中的 .txt 或 .csv 文件中读取一行(Qt Quick)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在模拟屏幕上显示一个字符串.为此,我应该从现有的 Filename.txt/Filename.csv 文件中读取文本.文本参数更新,如下面的代码所示.我需要从文本文件访问字符串并在 MarqueeText 元素中使用它.Accessed 字符串应用于 MarqueeText 元素的 text 字段.

I need to display a string on a simulation screen. For that I'm supposed to read the text from an existing Filename.txt/Filename.csv file. The text parameter is updated as shown in the below piece of code. I need to access the string from a text file and use it in MarqueeText element. The Accessed string shall be used in the text field of the MarqueeText element.

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

请帮我解决这个问题.谢谢.

Please help me with this. Thank you.

推荐答案

按照 wiki 页面阅读有关在 QML 中访问文件的信息.诺基亚维基论坛 http://web.archive.org/web/20150227025348/http://developer.nokia.com/community/wiki/Reading_and_writing_files_in_QML

Follow the wiki page to read about accessing files in QML. Nokia Wiki Forum http://web.archive.org/web/20150227025348/http://developer.nokia.com/community/wiki/Reading_and_writing_files_in_QML

总结:

创建自定义 QML 类型 FileIO:

Create a custom QML type, 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();
    }
}

这篇关于从 qml 中的 .txt 或 .csv 文件中读取一行(Qt Quick)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆