【UI开发】QT学习(文件IO)

(一)背景介绍

前段时间将C++学了个大概后,我就又开始了QT的学习,在接触到QT后才感觉到,前段时间学习C++的仅仅是一个皮毛,相对于C来说C++包装的更加完善,而细节上的东西而且还非常多。现在就是准备一边学QT一遍巩固C++了。相对于C来说感觉C++编程舒服了很多。一方面是C++的类库决定了用C++编程移植别人的程序会很轻松,另一方面结合QT图形编程调试非常快捷,我可以不用想以前一样非常苦逼的改一点调一次,出了问题也不知道是硬件还是软件的问题。现在就舒服多了吗,有问题只会是软件的问题,先在电脑端调试,再移植到LINUX,舒服了许多。
这段时间回到学校,明显清闲许多,得抓紧在开学以前学会QT和LINUX系统编程。听说今后找工作只会越来越难。我想在没有确定未来到底从事什么方面的工作之前,还是得要多学一点。
在找到专精的目标之前,我觉得自己可以什么都学一点,毕竟自己才刚刚大二还有时间。
下面是今天写了以QT的文件操作的小程序
感觉还是非常有意义的。

(二)软件设计

#include "widget.h"
#include "ui_widget.h"
#include <QFile>
#include <QFileDialog>
#include <QFileInfo>
#include <QDebug>
#include <QDateTime>
//二进制操作
#include <QDataStream>
#define filemode 1//打开文件方式1:文件流打开 0:正常打开
// 通过下面的方法可以快速调试问题
#define cout qDebug()<<"["<<__FILE__<<":"<<__LINE__<<"]"
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

#if filemode
void Widget::writedata()
{
    QFile file("../text.txt");
    //打开文件
    bool isok=file.open(QIODevice::WriteOnly);
    if(isok==true)
    {
        //创建数据流,和file文件关联
        //往数据流输入数据,相当于往文件里写数据
        QDataStream stream(&file);
        stream<<QString("杨越真帅")<<250;
        file.close();

    }


}


void Widget::readdata()
{
    QFile file("../text.txt");
    //打开文件
    bool isok=file.open(QIODevice::ReadOnly);
    if(isok==true)
    {
        //创建数据流,和file文件关联
        //往数据流输入数据,相当于往文件里写数据
        QDataStream stream(&file);
        QString str;
        int a;
        stream >>str>>a;
//        qDebug()<<str.toUtf8().data()<<a;
        cout<<str.toUtf8().data()<<a;
        file.close();

    }


}
#endif

void Widget::on_read_clicked()
{

#if filemode==0
    QString path=QFileDialog::getOpenFileName(this,
            "open","../","TXT(*.txt)");
    if(path.isEmpty()==false)
    {
        QFile file(path);
       bool isok= file.open(QIODevice::ReadOnly);
       if(isok==true)
       {

           QByteArray array;
           //只识别UTF8编码
           array=file.readAll();
           ui->textEdit->setText(QString(array));
           cout<<array;
//       while(file.atEnd()==false)
//       {
//           array+=file.readLine();
//       }

//       ui->textEdit->setText(array);

       }


       file.close();
       QFileInfo info(path);
       //通过转换,可以显示中文
       qDebug()<<"文件前缀"<<info.fileName().toUtf8().data();
       qDebug()<<"文件后缀"<<info.size();
       qDebug()<<"创建时间"<<info.created().toString("yyyy-MM-dd hh:mm:ss");
 }
#else

readdata();

}
#endif






void Widget::on_write_clicked()
{

#if filemode==0
    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();
            //写文件
            //一定要以UTF8存储
            file.write(str.toUtf8());
            //QString ->c++ string ->char*
            //file.write(str.toStdString().data());

        }
        file.close();

    }

#else
    Widget::writedata();
#endif


}




#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_read_clicked();
    void on_write_clicked();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

与光同程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值