基于QML的文件读写
来源:互联网 发布:ubuntu 列表显示 编辑:程序博客网 时间:2024/05/19 21:01
最近与群友交流,突然发现我还从来没有在qml中使用本地文件的功能,查阅QML的Text元素,居然没有source这个属性去加载本地的文本文件等,其实js本来也是无法操作io,但是QML有C++作为接口来处理,不知为何没有提供这样的属性,遂研究了一下这个功能。
既然QML不提供这样的属性和方法,那我们只能从C++入手 自己写个操作文件的类,然后处理文件。
主要是一个继承QObject的类,下面是代码:
#ifndef FILEIO_H#define FILEIO_H#include <QObject>#include <QTextStream>#include <QFile>class FileIO : public QObject{ Q_OBJECTpublic: 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
#include "fileio.h"#include <QFile>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;}FileIO操作类
之后可以在main函数里面注册这个操作类
#include <QtQml>#include "fileio.h"int main(int argc, char *argv[]){................. qmlRegisterType<FileIO, 1>("FileIO", 1, 0, "FileIO");.............}
而QML中则有:
import QtQuick 2.0import FileIO 1.0Rectangle { width: 300 height: 700 BorderImage { id: name source: "background.png" width: 300; height: 700 border.left: 5; border.top: 5 border.right: 5; border.bottom: 5 } Text { id: myText text: qsTr("中华男儿当自强") anchors.centerIn: parent font.pixelSize: 20 color: "white" } FileIO { id: myFile source: "fileno.txt" onError: console.log(msg) } Component.onCompleted: { console.log( "WRITE"+ myFile.write("TEST TEST file is OK")); myText.text = myFile.read(); }}
其实很简单 只要你了解QML就可以做到,虽然简单,但是还是再次记录下,以便后来者能够迅速掌握
最后附上我的github地址:寒山-居士-Github
1 0
- 基于QML的文件读写
- 基于Java的文件读写
- 如何在QML应用中读写文件
- 基于libGPE读写KML文件的研究
- 基于SMB协议的共享文件读写
- 基于SMB协议的共享文件读写
- 基于CMarkup的xml文件读写
- 基于SMB协议的共享文件读写
- 基于QML开发的二维码生成的QML插件
- Android读写文件基于Java的文件输入输出流
- QML布局管理--基于锚的布局
- 基于QML的播放器实现
- C++读写txt文件方式以及基于opencv的Mat数据类型读写txt文件
- WinCE下配置(ini)文件读写,基于MFC的
- C#:基于LINQ实现对ini文件的读写
- 基于boost.propertytree的XML文件读写类
- 基于位(Bit)的文件操作读写类
- 基于turtle库的坐标文件读写画图
- 阿斯顿噶是个阿斯顿发大厦
- 流量劫持(上):流量劫持是如何产生的
- [设计模式]-简单工厂模式
- Android连续点击两次退出程序
- android Activity类中的finish()、onDestory()和System.exit(0) 三者的区别
- 基于QML的文件读写
- WiFi辐射新解读
- Apache服务器中如何使用listen指令绑定ip地址和端口
- android 中 EditText加入图标 更改边框颜色 设置透明 代码
- 黑色5.5寸版iPhone 6曝光 部分规格泄露:64位A8处理器+千万级像素
- 各数据类型之间的关系
- POJ训练计划1062_昂贵的聘礼(最短路)
- python位图排序
- 社交分享下一站:手游录像正在走红