4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(
2014-12-15 08:15
489 查看
新建项目13IO
新建项目13IO
13IO.pro |
HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += guiwidgets network CONFIG += C++11 |
MyWidget.h |
#ifndefMYWIDGET_H #defineMYWIDGET_H #include<QWidget> classMyWidget:publicQWidget { Q_OBJECT public: explicitMyWidget(QWidget*parent=0); signals: publicslots: }; #endif//MYWIDGET_H |
MyWidget.cpp |
#include"MyWidget.h" #include<QFile> #include<QApplication> //#include<QDebug> //#include<QBuffer> //#include<QLabel> //#include<QTextStream> //#include<QDataStream> /** *QFile *QBuffer//memoryfile *QTcpSocket *QUdpSocket * *QDataStream *QTextStream */ MyWidget::MyWidget(QWidget*parent): QWidget(parent) { //QT中不建议使用char*这种类型的数据类型 QFilefile("../MyTest.txt"); file.open(QIODevice::ReadWrite); file.write(QByteArray("abc")); //同样,QFile中也有如下方法 //file.seek(); //file.write(); file.close(); } intmain(intargc,char**argv) { QApplicationapp(argc,argv); MyWidgetw; w.show(); returnapp.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(); } |
运行结果: |
3QBuffer 和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(); } |
运行结果: |
4QByteArray和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(); } |
5QTextStream和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//memoryfile *QTcpSocket *QUdpSocket * *QDataStream *QTextStream */ MyWidget::MyWidget(QWidget*parent): QWidget(parent) { //虚拟内存和内存映射,QFile可以自动创建文件 QFilefile("../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'; //readfile ucharch=*ptr; file.unmap(ptr); file.close(); } intmain(intargc,char**argv) { QApplicationapp(argc,argv); MyWidgetw; w.show(); returnapp.exec(); } //运行结果: |
相关文章推荐
- 4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(
- 4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(
- 4.关于QT中的QFile文件操作,QBuffer,Label上加入QPixmap,QByteArray和QString之间的差别,QTextStream和QDataStream的差别,QT内存映射(
- QTexstStream的操作对象是QIODevice(因此QFile,QBuffer,QProcess,QTcpSocket都可以使用),或者QString
- Qt中Qstring,char,int,QByteArray之间到转换
- 【转】Qt之文件操作 QFile
- Qt中Qstring,char,int,QByteArray之间到转换
- Qt中Qstring,char,int,QByteArray之间到转换
- Qt中Qstring,char,int,QByteArray之间到转换
- Qt中QString,int,char,QByteArray之间相互转换
- 关于文件读写操作中ios::app与ios::ate的区别
- Qt中Qstring,char,int,QByteArray之间到转换
- Qt之文件操作 QFile
- 【转】Qt之文件操作 QFile
- Qt中Qstring,char,int,QByteArray之间到转换
- Qt中Qstring,char,int,QByteArray之间到转换
- Qt中QString,char,int,QByteArray之间到转换
- Qt中Qstring,char,int,QByteArray之间到转换
- Qt中Qstring,char,int,QByteArray之间到转换
- Qt模块化笔记之core——Input/Output文件操作-流QTextStream使用