2012-01-17 6 views
7

Bir simülasyon ekranında bir dize görüntülemem gerekiyor. Bunun için mevcut bir Filename.txt/Filename.csv dosyasındaki metni okumam gerekiyordu. Metin parametresi, aşağıdaki kod parçasında gösterildiği gibi güncellenir. Bir metin dosyasından dizeye erişmem ve MarqueeText öğesinde kullanmam gerekiyor. Erişim dizesi, MarqueeText öğesinin metin metninde kullanılır.qml (Qt Quick) içinde bir .txt veya .csv dosyasından bir satır okuma

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

Lütfen bana yardım edin. Teşekkür ederim.

+0

gidip daha önce sorduğunuz soruları gözden geçirin. Birisi sorunuzu cevapladıysa, cevabı işaretleyin. Kimse cevap vermediyse, lütfen sorunuzu düzenleyebilir, böylece cevaplanabilir olur. –

+0

@ Styne666 Bu sorunun cevabını gösteren herhangi bir sorun var mı? Bazı soruları cevaplamak için çok yaşlı oldukları için sildim. Şimdi tamam mı? – Rahul

+0

Peki neden cevaplarını doğru olarak işaretlemediyseniz, insanlar sorularınızı cevaplamak isterler? Bu siteyi nasıl kullanacağım hakkında bir tartışma girmiyorum. Git ve [Analitik Rozeti] (http://stackoverflow.com/badges/1306/) alana kadar bütün [SSS] (http://stackoverflow.com/faq) ** şimdi ** 'yi okuyun. analitik). Link için –

cevap

11

QML'deki dosyalara erişme hakkında bilgi almak için wiki sayfasını izleyin. Nokia Wiki Forum http://web.archive.org/web/20150227025348/http://developer.nokia.com/community/wiki/Reading_and_writing_files_in_QML

Özet:

özel QML türü oluşturma 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; 
} 

yeni QML türü Kayıt:

#include "fileio.h" 

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

Gerçek QML Kullanımı:

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

teşekkürler. Bana gerçekten yardım etti. Dosya ne zaman oluşturulduğunu kontrol etmek mümkün mü? Bunu söyleyen bir özellik var mı? – SoH

+0

[QFileInfo :: created()] (http://qt-project.org/doc/qt-4.8/qfileinfo.html#created) Bu işlev size dosya bilgilerini verecektir. Ama umarım hala altta yatan işletim sistemine bağlıdır. Gerekli fonksiyonu geri getirmek için FileIO sınıfınızda bu işlevi kullanabilirsiniz. – RajaRaviVarma

+0

Şu hatayı alıyorum: 'FileIO' kayıtsız ad alanına 'FileIO'. Bunu nasıl çözebilirim? Teşekkürler –