• Qt笔记——QFile,QDataStream,QTextStream


    QFile

    #ifndef WIDGET_H
    #define WIDGET_H
    
    #include <QWidget>
    
    namespace Ui {
    class Widget;
    }
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit Widget(QWidget *parent = 0);
        ~Widget();
    
    private slots:
        void on_readButton_clicked();
    
        void on_writeButton_clicked();
    
    private:
        Ui::Widget *ui;
    };
    
    #endif // WIDGET_H
    #include "widget.h"
    #include "ui_widget.h"
    #include <QFileDialog>
    #include <QFileInfo>
    #include <QDateTime>
    #include <QDebug>
    #include <QDataStream>
    
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    void Widget::on_readButton_clicked()
    {
        QString path = QFileDialog::getOpenFileName(this,
                                                    "open",
                                                    "../",
                                                    "TXT(*.txt)");
        if(path.isEmpty() == false)
        {
            QFile file(path);
            bool isOK = file.open(QIODevice::ReadOnly);
            if(isOK == true)
            {
    #if 0
                //默认只识别utf8编码
                QByteArray array = file.readAll();
                //ui->textEdit->setText(QString(array));
                ui->textEdit->setText(array);
     #endif
                QByteArray array;
                while (file.atEnd() == false)
                {
                    array += file.readLine();
                }
                ui->textEdit->setText(array);
    
            }
            file.close();
    
            QFileInfo info(path);
            qDebug()<<info.fileName();
            qDebug()<<info.suffix();
            qDebug()<<info.size();
            qDebug()<<info.created().toString("yyyy-MM-dd hh:mm:ss");
        }
    }
    
    void Widget::on_writeButton_clicked()
    {
        QString path = QFileDialog::getSaveFileName(this,"save","../","TXT(*.txt)");
        if(path.isEmpty() == false)
        {
            QFile file;
            file.setFileName(path);
            bool isOk = file.open(QIODevice::WriteOnly);
            if(isOk == true)
            {
                QString str = ui->textEdit->toPlainText();
                file.write(str.toUtf8());
                //file.write((str.toStdString().data()));
            }
            file.close();
        }
    }

      

    QDataStream

    #ifndef WIDGET_H
    #define WIDGET_H
    
    #include <QWidget>
    
    namespace Ui {
    class Widget;
    }
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit Widget(QWidget *parent = 0);
        ~Widget();
        void writeData();
        void readData();
    private:
        Ui::Widget *ui;
    };
    
    #endif // WIDGET_H
    #include "widget.h"
    #include "ui_widget.h"
    #include <QDataStream>
    #include <QTextStream>
    #include <QFile>
    #include <QDebug>
    
    #define cout qDebug()<<"["<<__FILE__<<":"<<__LINE__<<"]"
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
        writeData();
        readData();
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    void Widget::writeData()
    {
        QFile file("../fff.txt");
        bool isOK = file.open(QIODevice::WriteOnly);
        if (true == isOK)
        {
            //创建数据流,和file文件关联
            //往数据流中写数据,相当于往文件里写数据
    
            QDataStream stream(&file);
            stream<<QString("hello world")<<250;
    
        }
        file.close();
    }
    
    void Widget::readData()
    {
        QFile file("../fff.txt");
        bool isOK = file.open(QIODevice::ReadOnly);
        if (true == isOK)
        {
            //创建数据流,和file文件关联
            //往数据流中读数据,相当于往文件里写数据
            QString str;
            int a;
            QDataStream stream(&file);
            stream>>str>>a;
            cout<<str<<a;
    
        }
        file.close();
    }

    QTextStream

    #ifndef WIDGET_H
    #define WIDGET_H
    
    #include <QWidget>
    
    namespace Ui {
    class Widget;
    }
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit Widget(QWidget *parent = 0);
        ~Widget();
        void writeData();
        void readData();
    
    private slots:
        void on_pushButton_clicked();
    
    private:
        Ui::Widget *ui;
    };
    
    #endif // WIDGET_H
    #include "widget.h"
    #include "ui_widget.h"
    #include <QFile>
    #include <QTextStream>
    #include <QDebug>
    #include <QFileDialog>
    #define cout qDebug()<<"["<<__FILE__<<":"<<__LINE__<<"]"
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
        writeData();
        readData();
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    void Widget::writeData()
    {
        QFile file;
        file.setFileName("../demo.txt");
    
        bool isOK = file.open(QIODevice::WriteOnly);
        if(true == isOK)
        {
            QTextStream stream(&file);
            //指定编码
            stream.setCodec("UTF-8");
            stream << QString("hello world")<<250;
            file.close();
        }
    }
    
    void Widget::readData()
    {
        //这么读有问题
        QFile file;
        file.setFileName("../demo.txt");
    
        bool isOK = file.open(QIODevice::ReadOnly);
        if(true == isOK)
        {
            QTextStream stream(&file);
            //指定编码
            stream.setCodec("UTF-8");
            QString str;
            int a;
            stream >>str>>a;
            cout<<str<<a;
            file.close();
        }
    }
    
    void Widget::on_pushButton_clicked()
    {
        QString path = QFileDialog::getOpenFileName(this,
                                                    "read",
                                                    "../"
                                                    );
        if(false == path.isEmpty())
        {
            QFile file;
            file.setFileName(path);
            bool isOK = file.open(QIODevice::ReadOnly);
            if(true == isOK)
            {
                QTextStream stream(&file);
                stream.setCodec("UTF-8");
                QString str = stream.readAll();
                ui->textEdit->setText(str);
                file.close();
            }
        }
    
    }

    QBuffer

    #ifndef WIDGET_H
    #define WIDGET_H
    
    #include <QWidget>
    
    namespace Ui {
    class Widget;
    }
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit Widget(QWidget *parent = 0);
        ~Widget();
    
    private:
        Ui::Widget *ui;
    };
    
    #endif // WIDGET_H
    #include "widget.h"
    #include "ui_widget.h"
    #include <QBuffer>//内存文件
    #include <QDebug>
    
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
    
        QBuffer memFile;
        memFile.open(QIODevice::WriteOnly);
    
        memFile.write("hello");
        memFile.write("world");
    
        memFile.close();
    
        qDebug()<<memFile.buffer();
    
        QBuffer memFile1;
        memFile1.open(QIODevice::WriteOnly);
        QDataStream stream(&memFile1);
        stream<<QString("测试")<<250;
        memFile1.close();
    
        qDebug()<<QString(memFile.buffer()).toUtf8().data();//输出有问题
    //输出正确
        memFile1.open(QIODevice::ReadOnly);
        QDataStream in(&memFile1);
        QString str;
        int a;
        in>>str>>a;
        memFile1.close();
        qDebug()<<str.toUtf8().data()<<a;
    }
    
    Widget::~Widget()
    {
        delete ui;
    }

     

  • 相关阅读:
    C++11: reference_wrapper
    mac 查看目前哪些进程占用哪些端口
    Intellij IDEA 10.5 语言设置
    linux中的strip命令简介------给文件脱衣服
    HashMap的key可以是可变的对象吗???
    java BIO/NIO/AIO 学习
    java 反射
    Java线程同步
    maven modules
    设计模式在cocos2d-x中的使用--简单工厂模式(Simple Factory)
  • 原文地址:https://www.cnblogs.com/dalanjing/p/8724884.html
Copyright © 2020-2023  润新知