利用qmlRegisterType接口注册一个文件操作类到Qml中,这样Qml就可以实现读写文件。
1 FileObject.h
#ifndef FILE_OBJECT_H
#define FILE_OBJECT_H
#include<QObject>
classFileObject:publicQObject
{
Q_OBJECT
Q_PROPERTY(QString source READ source WRITE setSource NOTIFY sourceChanged)
public:
explicitFileObject(QObject*parent =0);
Q_INVOKABLE QString read();
Q_INVOKABLE bool write(constQString& data);
void setSource(constQString& source){ m_source = source;};
QString source(){return m_source;}
signals:
void sourceChanged(constQString& source);
private:
QString m_source;
};
#endif// FILE_OBJECT_H
2 FileObject.cpp
#include"FileObject.h"
#include<QFile>
#include<QTextStream>
FileObject::FileObject(QObject*parent):
QObject(parent)
{
}
QStringFileObject::read()
{
QString content;
QFile file(m_source);
if( file.open(QIODevice::ReadOnly)){
content = file.readAll();
file.close();
}
return content;
}
boolFileObject::write(constQString& data)
{
QFile file(m_source);
if( file.open(QFile::WriteOnly|QFile::Truncate)){
QTextStream out(&file);
out<<data;
file.close();
returntrue;
}
else{
returnfalse;
}
}
3 注册FileObject到Qml中
#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!!!") ;
importQtQuick1.1
importFileObject1.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();
}
}
}
---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:你才小学生,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ----------------------------------------------------------------------------------------------------------------------
|