(一)背景介绍
前段时间将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