
我们使用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会更好。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)