-
新建项目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();
}
//执行结果:
|