前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >qml读写文件

qml读写文件

作者头像
Qt君
发布2019-07-15 18:02:23
2.1K0
发布2019-07-15 18:02:23
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

利用qmlRegisterType接口注册一个文件操作类到Qml中,这样Qml就可以实现读写文件。

1 FileObject.h

代码语言:javascript
复制
#ifndef FILE_OBJECT_H
#define FILE_OBJECT_H

#include <QObject>

class FileObject : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString source READ source WRITE setSource NOTIFY sourceChanged)
public:
    explicit FileObject(QObject *parent = 0);

    Q_INVOKABLE QString read();
    Q_INVOKABLE bool write(const QString& data);

    void setSource(const QString& source) { m_source = source; };
    QString source() { return m_source; }

signals:
    void sourceChanged(const QString& source);

private:
    QString m_source;
};

#endif // FILE_OBJECT_H

2 FileObject.cpp

代码语言:javascript
复制
#include "FileObject.h"

#include <QFile>
#include <QTextStream>

FileObject::FileObject(QObject *parent) :
    QObject(parent)
{

}

QString FileObject::read()
{
    QString content;
    QFile file(m_source);
    if ( file.open(QIODevice::ReadOnly) ) {
        content = file.readAll();
        file.close();
    } 

    return content;
}

bool FileObject::write(const QString& data)
{
    QFile file(m_source);
    if ( file.open(QFile::WriteOnly | QFile::Truncate) ) {
        QTextStream out(&file);
           out<<data;
        file.close();
        return true;
    }
    else {
        return false;
    }
}

3 注册FileObject到Qml中

代码语言:javascript
复制
#include "FileObject.h"

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

4 在Qml中使用FileObject实例

  • 读文件内容 fileObject.read();
  • 写文件 fileObject.write("Hello world!!!");
代码语言:javascript
复制
import QtQuick 1.1
import FileObject 1.0

Rectangle {
    width: 640
    height: 320

    Text {
        id: myText
        anchors.centerIn: parent
    }

    FileObject{
        id: fileObject
        source: "test.txt"
    }

    MouseArea {
        anchors.fill: parent
        onClicked: {
            fileObject.write("Hello world!!!");
            myText.text =  fileObject.read();
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 FileObject.h
  • 2 FileObject.cpp
  • 3 注册FileObject到Qml中
  • 4 在Qml中使用FileObject实例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档