您的位置:首页 > Web前端

4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(

2014-12-15 08:15 746 查看


新建项目13IO

13IO.pro

HEADERS
+=
\

   
MyWidget.h

 

SOURCES
+=
\

   
MyWidget.cpp

 

QT
+=
gui widgets
network

CONFIG
+=
C++11

MyWidget.h

#ifndef MYWIDGET_H

#define MYWIDGET_H

 

#include <QWidget>

 

class MyWidget : public QWidget

{

    Q_OBJECT

public:

    explicit MyWidget(QWidget*parent = 0);

 

signals:

 

public slots:

 

};

 

#endif // MYWIDGET_H


MyWidget.cpp

#include "MyWidget.h"

#include <QFile>

#include <QApplication>

//#include <QDebug>

//#include <QBuffer>

//#include <QLabel>

//#include <QTextStream>

//#include <QDataStream>

 

/**

* QFile

* QBuffer     //memory file

* QTcpSocket

* QUdpSocket

*

* QDataStream

* QTextStream

*/

 

MyWidget::MyWidget(QWidget*parent) :

    QWidget(parent)

{

    //QT中不建议使用char*这种类型的数据类型

    QFile file("../MyTest.txt");

    file.open(QIODevice::ReadWrite);

 

    file.write(QByteArray("abc"));

    //同样,QFile中也有如下方法

    //file.seek();

    //file.write();

    file.close();

}

 

int main(int argc,char** argv)

{

    QApplication app(argc,argv);

 

    MyWidget w;

    w.show();

 

    return app.exec();

}


运行结果:



生成的MyTest.txt文件的内容如下:



 

2
关于QBuffer

#include
"MyWidget.h"

#include
<QApplication>

#include
<QDebug>

#include
<QBuffer>

//#include
<QLabel>

//#include
<QTextStream>

//#include
<QDataStream>

 

/**

 *
QFile

 *
QBuffer    
//memory
file

 *
QTcpSocket

 *
QUdpSocket

 *

 *
QDataStream

 *
QTextStream

 */

 

MyWidget::MyWidget(QWidget
*parent)
:

   
QWidget(parent)

{

   
QBuffer
buffer;

   
buffer.open(QIODevice::ReadWrite);

 

   
buffer.write("abc");

   
buffer.write("aabbcc");

 

   
buffer.close();

 

   
//可以知道buffer中存储的是缓冲区,通过下面的方式看看buffer中的内容是什么

   
qDebug()
<<
buffer.buffer();

}

 

int
main(int
argc,char**
argv)

{

   
QApplication
app(argc,argv);

 

   
MyWidget
w;

   
w.show();

 

   
return
app.exec();

}

运行结果:



 

3 QBuffer
和 QPixmap实现在Label上添加图片,下面是内存文件的应用

#include
"MyWidget.h"

#include
<QApplication>

#include
<QDebug>

#include
<QBuffer>

#include
<QLabel>

//#include
<QTextStream>

//#include
<QDataStream>

 

/**

 *
QFile

 *
QBuffer    
//memory
file

 *
QTcpSocket

 *
QUdpSocket

 *

 *
QDataStream

 *
QTextStream

 */

 

MyWidget::MyWidget(QWidget
*parent)
:

   
QWidget(parent)

{

   
//
send
side

QBuffer
buffer;

//不要路径,因为它的内容是写在内存里面的。

   
buffer.open(QIODevice::ReadWrite);

QPixmap
pixmap("../aaa.png");

//pixmap的save实际上有两个参数,保存成相应的文件的时候要指定相应的格式,PNG是不是真,JPG是失真的。JPG是有损压缩,PNG是无损压缩。

   
pixmap.save(&buffer,
"PNG");

   
buffer.close();

 

   
qDebug()
<<
buffer.buffer().size();

 

   
//
recv
side

QPixmap
pixmap2;

//通过loadFromData把它收起来。

   
pixmap2.loadFromData(buffer.buffer(),
"PNG");

 

   
QLabel*
label
=
new
QLabel(this);

   
label->setPixmap(pixmap2);

}

 

int
main(int
argc,char**
argv)

{

   
QApplication
app(argc,argv);

 

   
MyWidget
w;

   
w.show();

 

   
return
app.exec();

}

运行结果:





 

4 QByteArray和QString之间的区别

#include
"MyWidget.h"

#include
<QApplication>

#include
<QDebug>

#include
<QBuffer>

#include
<QLabel>

//#include
<QTextStream>

//#include
<QDataStream>

 

/**

 *
QFile

 *
QBuffer    
//memory
file

 *
QTcpSocket

 *
QUdpSocket

 *

 *
QDataStream

 *
QTextStream

 */

 

MyWidget::MyWidget(QWidget
*parent)
:

   
QWidget(parent)

{

   
//关于QByteArray和QString

   
//QByteArray编码的时候将一个汉字编码成3个字节

   
QByteArray
ba("涂作权");

   
//QSting中有自己字符,它的大小就是几个字符

   
QString
str("涂作权");

   
qDebug()
<<
ba.size()
<<
str.size();

}

 

int
main(int
argc,char**
argv)

{

   
QApplication
app(argc,argv);

 

   
MyWidget
w;

   
w.show();

 

   
return
app.exec();

}

 

5 QTextStream和QDataStream的区别

#include
"MyWidget.h"

#include
<QApplication>

#include
<QDebug>

//#include
<QBuffer>

#include
<QFile>

//#include
<QLabel>

#include
<QTextStream>

//#include
<QDataStream>

 

/**

 *
QFile

 *
QBuffer    
//memory
file

 *
QTcpSocket

 *
QUdpSocket

 *

 *
QDataStream

 *
QTextStream

 */

 

MyWidget::MyWidget(QWidget
*parent)
:

   
QWidget(parent)

{

   
QFile
file("../teststream.txt");

   
//QTextStream需要一个QIODevice来构造它

   
file.open(QIODevice::ReadWrite);

 

   
QTextStream
textStream(&file);

 

   
//通过下面的方式可以写文件,并且文件内容中是正常的

   
textStream
<<
1
<<
"abc"
<<
1.2
<<
QString("abc");

 

file.close();

//运行之后,在项目所在目录下发现多了teststream.txt文件,文件内容如下:



#if
0

   
//如果想写进去很方便读出来的话使用DataStream

   
QFile
file("../teststream.txt");

   
file.open(QIODevice::ReadWrite);

 

   
QDataStream
dataStream(&file);

   
dataStream
<< 1
<< "abc"
<< 1.2
<< QString("abc")
<< QPoint(1,1);

file.close();

//上面的运行结果如下:



#endif

}

 

int
main(int
argc,char**
argv)

{

   
QApplication
app(argc,argv);

 

   
MyWidget
w;

   
w.show();

 

   
return
app.exec();

}

 

6
内存映射,虚拟内存,可以使用多台电脑操作同一个文件(只要指针指向文件的位置不同就可以)

#include "MyWidget.h"

#include <QApplication>

#include <QDebug>

//#include <QBuffer>

#include <QFile>

//#include <QLabel>

#include <QTextStream>

//#include <QDataStream>

 

/**

* QFile

* QBuffer     //memory file

* QTcpSocket

* QUdpSocket

*

* QDataStream

* QTextStream

*/

 

MyWidget::MyWidget(QWidget*parent) :

    QWidget(parent)

{

    //虚拟内存和内存映射,QFile可以自动创建文件

    QFile file("../map.txt");

 

    file.open(QIODevice::ReadWrite);

    //扩展文件的大小为64k

    file.seek(64* 1024);

    //向文件中写入1

    file.write("1");

    //文件关闭

    file.close();

    //然后再通过ReadWrite的方式构造它

    file.open(QIODevice::ReadWrite);

    //构造内存映射

    uchar* ptr = file.map(0,64*1024);

    //可以像指针一样来操作文件内容

   *ptr = 'a';

    ptr[1] = 'b';

 

    //read file

    uchar ch =*ptr;

    file.unmap(ptr);

    file.close();

}

 

int main(int argc,char** argv)

{

    QApplication app(argc,argv);

 

    MyWidget w;

    w.show();

 

    return app.exec();

}

//运行结果:



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: