日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

發布時間:2024/9/27 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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");

    //pixmapsave實際上有兩個參數,保存成相應的文件的時候要指定相應的格式,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 QByteArrayQString之間的區別

    #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)

    {

    ??? //關于QByteArrayQString

    ??? //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 QTextStreamQDataStream的區別

    #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内存映射(的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。