2012-01-17 414 views
7

我需要在模拟屏幕上显示一个字符串。为此,我应该从现有的Filename.txt/Filename.csv文件中读取文本。文本参数更新如下面的一段代码所示。我需要从文本文件中访问字符串并在MarqueeText元素中使用它。访问的字符串应用于MarqueeText元素的文本字段中。从qt中的.txt或.csv文件读取一行(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 
} 

请帮我这个。谢谢。

+0

请去查看您以前提出的问题。如果有人回答了您的问题,请勾选答案。如果没有人回答,请编辑您的问题,以便回复。 – 2012-01-17 12:27:32

+0

@ Styne666有没有什么问题可以解答这个问题。我删除了一些问题,因为它们太旧而无法回答。现在可以吗? – Rahul 2012-01-17 13:07:40

+0

那么,如果你从不将自己的答案标记为正确,那么人们为什么会想回答你的问题?我没有进入关于如何使用这个网站的讨论。现在就阅读整个[FAQ](http://stackoverflow.com/faq)**,完整地阅读[Analytical Badge](http://stackoverflow.com/badges/1306/)分析)。 – 2012-01-17 13:22:56

回答

11

请按照wiki页面阅读有关以QML格式访问文件的内容。诺基亚维基论坛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(); 
    } 
} 
+0

感谢您的链接。真的帮助了我。是否可以检查文件创建时间?有一些属性可以说明这一点吗? – SoH 2012-08-07 06:48:20

+0

[QFileInfo :: created()](http://qt-project.org/doc/qt-4.8/qfileinfo.html#created)这个函数会给你文件信息。但我希望它仍然取决于底层操作系统。您可以在FileIO类中使用此函数来返回所需的数据。 – RajaRaviVarma 2012-08-07 14:12:01

+0

我收到以下错误:将'FileIO'放入未注册的命名空间'FileIO'中。如何解决这个问题?谢谢 – 2017-06-06 10:50:59