旨在解决QML不能读写文件的问题。目前为预览版本(文末源码),供你们一块儿参考学习。
File组件经过source
的属性来设置须要读写的文件,还能够经过访问/设置text
的内容来读取/写入文件。微信
qmlRegisterType<File>("MyModel", 1, 0, "File");
import MyModel 1.0
/* 建立实例 */ File { id: file source: "D:/Document/hello.txt" } TextArea { anchors.fill: parent font.pixelSize: 30 onTextChanged: file.text = text Component.onCompleted: text = file.text }
#include "File.h" int main(int argc, char *argv[]) { ... qmlRegisterType<File>("MyModel", 1, 0, "File"); ... }
#ifndef QT_HUB_FILE_H #define QT_HUB_FILE_H #include <QObject> class File : public QObject { Q_OBJECT public: File(); Q_PROPERTY(QString source READ source WRITE setSource NOTIFY sourceChanged) Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged) QString source() const; void setSource(const QString &source); QString text() const; void setText(const QString &text); signals: void sourceChanged(); void textChanged(); private slots: void readFile(); private: QString m_source; QString m_text; }; #endif // FILE_H
#include "File.h" #include <QFile> #include <QDebug> File::File() { connect(this, SIGNAL(sourceChanged()), this, SLOT(readFile())); } void File::setSource(const QString &source) { m_source = source; emit sourceChanged(); } QString File::source() const { return m_source; } void File::setText(const QString &text) { QFile file(m_source); if (!file.open(QIODevice::WriteOnly)) { m_text = ""; qDebug() << "Error:" << m_source << "open failed!"; } else { qint64 byte = file.write(text.toUtf8()); if (byte != text.toUtf8().size()) { m_text = text.toUtf8().left(byte); qDebug() << "Error:" << m_source << "open failed!"; } else { m_text = text; } file.close(); } emit textChanged(); } void File::readFile() { QFile file(m_source); if (!file.open(QIODevice::ReadOnly)) { m_text = ""; qDebug() << "Error:" << m_source << "open failed!"; } m_text = file.readAll(); emit textChanged(); } QString File::text() const { return m_text; }
... import QtQuick 2.0 import QtQuick.Window 2.0 import QtQuick.Controls 2.0 import MyModel 1.0 Window { visible: true width: 480 height: 320 title: qsTr("File组件 by Qt君") File { id: file source: "D:/Document/hello.txt" } TextArea { anchors.fill: parent font.pixelSize: 30 onTextChanged: file.text = text Component.onCompleted: text = file.text } }
第一时间获取最新推送,请关注微信公众号Qt君。学习