如何在QML应用中读写文件

如何在QML应用中读写文件,第1张

1)创建一个简单的模版应用

我们使用Ubuntu SDK的模版来创建一个最简单的应用:

我们选择“QML App with C++ plugin”模版来做我们的应用。

2)添加文件读写的文件到项目中

我们添加如下的C++ "FileIO类到我们的backend plugin中:

#ifndef FILEIO_H

#define FILEIO_H

#include <QObject>

#include <QTextCodec>

#include <QDebug>

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 getenv(const QString envVarName) const

private:

QString mSource

QString datapath

}

inline QString GBK2UTF8(const QString &inStr)

{

QList<QByteArray>codecs = QTextCodec::availableCodecs()

for ( int i = 0i <codecs.length()i ++ ) {

//qDebug() <<"codec: " + QTextCodec::codecForMib(1015)->toUnicode(codecs.at(i))

qDebug() <<"codec: " <<QString::fromLocal8Bit(codecs.at(i))

}

QTextCodec *gbk = QTextCodec::codecForName("GBK")

QTextCodec::setCodecForLocale(QTextCodec::codecForLocale())

//QTextCodec *utf8 = QTextCodec::codecForName("UTF-8")

QString g2u = gbk->toUnicode(gbk->fromUnicode(inStr))// gbk convert utf8

return g2u

}

#endif // FILEIO_H

#include "fileio.h"

#include <QFile>

#include <QTextStream>

#include <QDebug>

#include <QFileInfo>

#include <QTextCodec>

FileIO::FileIO(QObject *parent) : QObject(parent)

{

datapath = getenv("TMPDIR") + "/"

qDebug() <<"datapath: " + datapath

}

QString FileIO::read()

{

qDebug() <<"reading ....!"

if (mSource.isEmpty()){

emit error("source is empty")

return QString()

}

QFile file(datapath + mSource)

QFileInfo fileInfo(file.fileName())

qDebug() <<"file path: " <<fileInfo.absoluteFilePath()

QString fileContent

if ( file.open(QIODevice::ReadOnly) ) {

QString line

QTextCodec *gbk = QTextCodec::codecForName("GBK")

QTextStream t( &file )

t.setCodec(gbk)

do {

line = t.readLine()

fileContent += line

QList是一种表示链表的模板类。

QList是Qt的一种泛型容器类。它以链表方式存储一组值,并能对这组数据进行快速索引,还提供了快速插入和删除等 *** 作

QList、QLinkedList和QVector提供的 *** 作极其相似:

对大多数 *** 作来说,我们用QList就可以了。其API是基于索引(index)的,因此用起来比QLinkedList更方便(QLinkedList的API是基于迭代器的)。QList比QVector更快,这是由它们在内存中的存储方式决定的。

需要使用QLinkedList的地方:

需要使用QVector的地方:元素的储存位置彼此相邻。

QList表示为一组指向被存储元素的数组。(例外,如果T本身就是指针类型,或者是size不大于指针类型的基本类型,或者是Qt的共享类,那么QList会直接在指针数组中存储这些元素。)元素个数小于1000的QList能够很快地实现在链表中间插入 *** 作,以及快速的查找 *** 作。此外,由于QList在链表两端都预先分配了内存,因此实现prepend()和append() *** 作都很快。

注意:对于size比指针大的共享类,使用QVector会更好。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11641476.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存