4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(
新建項目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(); } //運行結果: |
?
總結
以上是生活随笔為你收集整理的4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 军人配偶出轨军人算破坏军婚吗
- 下一篇: 中国驻阿曼大使馆电话可以说中文吗