2012-01-17 21 views
7

シミュレーション画面に文字列を表示する必要があります。そのために、私は既存のFilename.txt/Filename.csvファイルからテキストを読み込むことになっています。テキストパラメータは、下のコードのように更新されます。テキストファイルから文字列にアクセスし、それをMarqueeText要素で使用する必要があります。アクセスされた文字列は、テキストフィールドのMarqueeText要素で使用されます。qml(.tクイック)の.txtまたは.csvファイルから行を読む

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

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

実際のQMLの使用を。誰かがあなたの質問に答えた場合は、その答えにチェックを入れてください。誰もそれに答えていない場合は、あなたの質問を編集して回答できるようにしてください。 –

+0

@ Styne666何か問題がありますか?私は彼らが答えには余りにも古いので、いくつかの質問を削除しました。今は大丈夫ですか? – Rahul

+0

あなたは正しい答えとしてマークしないと、なぜ人々はあなたの質問に答えたいでしょうか?私はこのサイトの使い方について話し合うことはしていません。 [Analytical Badge](http://stackoverflow.com/badges/1306/)を入手するまで、[FAQ](http://stackoverflow.com/faq)**を今すぐ**読んでください。分析的)。 –

答えて

11

QMLのファイルへのアクセスについては、wikiページに従ってください。ノキアウィキフォーラム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タイプ登録:あなたは以前に求めてきました質問に行くと確認してください

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

+0

[QFileInfo :: created()](http://qt-project.org/doc/qt-4.8/qfileinfo.html#created)この関数は、ファイル情報を提供します。しかし、私はそれがまだ根底にあるOSに依存していることを願っていますFileIOクラスでこの関数を使用して、必要なデータを返すことができます。 – RajaRaviVarma

+0

私は次のエラーが発生しています: 'FileIO'は未登録の名前空間 'FileIO'です。これを解決するには?ありがとう –