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


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

     

  • 相关阅读:
    浅谈Python常用英文单词
    python web框架 Django的APP以及目录介绍 2
    Python中的enumerate函数
    python web框架 django wsgi 理论
    python web框架 django 工程 创建 目录介绍
    python web框架 django工程的创建
    mysql c 终止 mysql输入语句模式
    前端 html input标签 placeholder属性 标签上显示内容
    img 标签注意 默认img标签,有一个1px的边框 img{ border: 0; }
    前端 html input标签 disable 属性
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6780454.html
Copyright © 2020-2023  润新知