4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(
新建項(xiàng)目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 *這種類型的數(shù)據(jù)類型 ??? 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(); } |
| 運(yùn)行結(jié)果:
生成的MyTest.txt文件的內(nèi)容如下:
|
| ? |
| 2 關(guān)于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中存儲的是緩沖區(qū),通過下面的方式看看buffer中的內(nèi)容是什么 ??? qDebug() << buffer.buffer(); } ? int main(int argc,char** argv) { ??? QApplication app(argc,argv); ? ??? MyWidget w; ??? w.show(); ? ??? return app.exec(); } |
| 運(yùn)行結(jié)果:
|
| ? |
| 3 QBuffer 和 QPixmap實(shí)現(xiàn)在Label上添加圖片,下面是內(nèi)存文件的應(yīng)用 |
| #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; //不要路徑,因?yàn)樗膬?nèi)容是寫在內(nèi)存里面的。 ??? buffer.open(QIODevice::ReadWrite); QPixmap pixmap("../aaa.png"); //pixmap的save實(shí)際上有兩個(gè)參數(shù),保存成相應(yīng)的文件的時(shí)候要指定相應(yīng)的格式,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(); } |
| 運(yùn)行結(jié)果:
|
| ? |
| 4 QByteArray和QString之間的區(qū)別 |
| #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) { ??? //關(guān)于QByteArray和QString ??? //QByteArray編碼的時(shí)候?qū)⒁粋€(gè)漢字編碼成3個(gè)字節(jié) ??? QByteArray ba("涂作權(quán)"); ??? //QSting中有自己字符,它的大小就是幾個(gè)字符 ??? QString str("涂作權(quán)"); ??? 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的區(qū)別 |
| #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需要一個(gè)QIODevice來構(gòu)造它 ??? file.open(QIODevice::ReadWrite); ? ??? QTextStream textStream(&file); ? ??? //通過下面的方式可以寫文件,并且文件內(nèi)容中是正常的 ??? textStream << 1 << "abc" << 1.2 << QString("abc"); ? file.close(); //運(yùn)行之后,在項(xiàng)目所在目錄下發(fā)現(xiàn)多了teststream.txt文件,文件內(nèi)容如下:
#if 0 ??? //如果想寫進(jìn)去很方便讀出來的話使用DataStream ??? QFile file("../teststream.txt"); ??? file.open(QIODevice::ReadWrite); ? ??? QDataStream dataStream(&file); ??? dataStream << 1 << "abc" << 1.2 << QString("abc") << QPoint(1,1); file.close(); //上面的運(yùn)行結(jié)果如下:
#endif } ? int main(int argc,char** argv) { ??? QApplication app(argc,argv); ? ??? MyWidget w; ??? w.show(); ? ??? return app.exec(); } |
| ? |
| 6 內(nèi)存映射,虛擬內(nèi)存,可以使用多臺電腦操作同一個(gè)文件(只要指針指向文件的位置不同就可以) |
| #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) { ??? //虛擬內(nèi)存和內(nèi)存映射,QFile可以自動(dòng)創(chuàng)建文件 ??? QFile file("../map.txt"); ? ??? file.open(QIODevice::ReadWrite); ??? //擴(kuò)展文件的大小為64k ??? file.seek(64 * 1024); ??? //向文件中寫入1 ??? file.write("1"); ??? //文件關(guān)閉 ??? file.close(); ??? //然后再通過ReadWrite的方式構(gòu)造它 ??? file.open(QIODevice::ReadWrite); ??? //構(gòu)造內(nèi)存映射 ??? uchar* ptr = file.map(0,64*1024); ??? //可以像指針一樣來操作文件內(nèi)容 ??? *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(); } //運(yùn)行結(jié)果: |
?
總結(jié)
以上是生活随笔為你收集整理的4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 军人配偶出轨军人算破坏军婚吗
- 下一篇: 5.关于QT中的网络编程,QTcpSoc