目录
一、文件读写操作QFile
1.1 头文件
1.2 外部函数
二、UI设计
三、代码
3.1 mainwindow.h
3.2 mainwindow.c
四、成果

一、文件读写操作QFile
QT自带了一个文件操作的类->QFile ,试验中也是着重 QFile 的操作

1.1 头文件
#include<QFile>
1.2 外部函数

这些函数没必要都去记住,咱们只须要记住简略的例如open()、readLine()、atEnd()、close() 等罕用的函数即可

首先咱们new 一个 QFile 对象的时候有四种构造方法,通常来说咱们传入 文件的路径名 就好了
而后咱们要调用open()函数,这个函数是通知操作系统咱们通过什么样的形式关上,例如只读关上、只写关上、可读可写关上……,这个和咱们在C语言中的文件关上函数是相似的,咱们在QIODevice看到一个枚举类型的 OpenModeFlag打开方式

enum OpenModeFlag {        NotOpen = 0x0000,        ReadOnly = 0x0001,        WriteOnly = 0x0002,        ReadWrite = ReadOnly | WriteOnly,        Append = 0x0004,        Truncate = 0x0008,        Text = 0x0010,        Unbuffered = 0x0020,        NewOnly = 0x0040,        ExistingOnly = 0x0080    };

这些就是文件关上的一些模式了,能够依据本人的需要选用,咱们这里既然是文件的读取显示操作,那么只须要读取,于是咱们的打开方式就是:QIODevice::ReadOnly

而后就是对这个文件从头到尾读取,在以前咱们学的C语言中有一个文件完结标记EOF,个别这个EOF是 − 1 -1 −1 然而这里的QFile 提供了一个函数atEnd()如果当咱们读到了文件开端,那么就会返回一个true

例如:

QFile file("in.txt");if (!file.open(QIODevice::ReadOnly | QIODevice::Text))    return; while (!file.atEnd()) {    QByteArray line = file.readLine();    process_line(line);}

最初咱们通过file.close()敞开数据流就好了

二、UI设计
这里轻易画画就好了,不过能够在文本显示框插入背景图,只须要在组件的styleSheet中增加资源即可


mainwindow.ui

<?xml version="1.0" encoding="UTF-8"?><ui version="4.0"> <class>MainWindow</class> <widget class="QMainWindow" name="MainWindow">  <property name="geometry">   <rect>    <x>0</x>    <y>0</y>    <width>300</width>    <height>500</height>   </rect>  </property>  <property name="windowTitle">   <string>MainWindow</string>  </property>  <property name="autoFillBackground">   <bool>false</bool>  </property>  <property name="styleSheet">   <string notr="true"/>  </property>  <widget class="QWidget" name="centralwidget">   <property name="autoFillBackground">    <bool>true</bool>   </property>   <property name="styleSheet">    <string notr="true"/>   </property>   <layout class="QVBoxLayout" name="verticalLayout">    <item>     <widget class="QWidget" name="widget" native="true">      <layout class="QHBoxLayout" name="horizontalLayout">       <item>        <widget class="QLabel" name="label">         <property name="text">          <string>文件门路</string>         </property>        </widget>       </item>       <item>        <widget class="QPushButton" name="pushButton">         <property name="text">          <string>关上文件</string>         </property>        </widget>       </item>      </layout>     </widget>    </item>    <item>     <widget class="QGroupBox" name="groupBox">      <property name="styleSheet">       <string notr="true"/>      </property>      <property name="title">       <string>文本内容:</string>      </property>      <layout class="QHBoxLayout" name="horizontalLayout_2">       <item>        <widget class="QTextEdit" name="textEdit">         <property name="styleSheet">          <string notr="true">background-image: url(:/a/tmp/back.png);background-color: rgba(0, 0, 0, 12);</string>         </property>        </widget>       </item>      </layout>     </widget>    </item>   </layout>  </widget>  <widget class="QMenuBar" name="menubar">   <property name="geometry">    <rect>     <x>0</x>     <y>0</y>     <width>300</width>     <height>23</height>    </rect>   </property>  </widget>  <widget class="QStatusBar" name="statusbar"/> </widget> <resources/> <connections/></ui>

三、代码

3.1 mainwindow.h

#ifndef MAINWINDOW_H#define MAINWINDOW_H #include <QMainWindow> QT_BEGIN_NAMESPACEnamespace Ui { class MainWindow; }QT_END_NAMESPACE class MainWindow : public QMainWindow{    Q_OBJECT public:    MainWindow(QWidget *parent = nullptr);    ~MainWindow(); private:    Ui::MainWindow *ui;};#endif // MAINWINDOW_H

3.2 mainwindow.c

#include "mainwindow.h"#include "ui_mainwindow.h"#include <QFile>#include <QFileDialog>#include <QDebug>#include <QPushButton>#include <QTextStream>#include <QFileInfo>#include <QDateTime> MainWindow::MainWindow(QWidget *parent)    : QMainWindow(parent)    , ui(new Ui::MainWindow){    ui->setupUi(this);     //应用connec函数,相熟匿名表达式    connect(ui->pushButton,&QPushButton::clicked,[=](){       //点击按钮,弹出文件抉择对话框       //应用对话框,获取关上门路,留神参数一是父类对象 ,参数二是对话窗口名称 参数三是默认关上门路       QString fileName = QFileDialog::getOpenFileName(this,              tr("Open File"), "C:\\data");       //使门路显示到门路 line edit中央       ui->label->setText(fileName);       //调试的跟踪打印       qDebug()<<"文件门路为:"+fileName;       //应用Qfile操作文件       QFile file(fileName);       //关上文件,留神参数的应用,文件修饰符,文件指针,能够和之前的嵌入式环境编程的常识分割起来,包含 模式操作       file.open(QIODevice::ReadOnly);       //应用数组数据结构接读取数据        QByteArray array;       while(!file.atEnd())       {           array += file.readLine(); //按行读       }       ui->textEdit->setText(array);       //敞开文件数据流       file.close();       //编码格局类       //QTextCodec * codec = QTextCodec::codecForName("gbk");       QFileInfo info(fileName);       qDebug() << "大小:" << info.size() << " 后缀名:" << info.suffix() << " 文件名称:"<<info.fileName() << " 文件门路:"<< info.filePath();       qDebug() << "创立日期:" << info.birthTime().toString("yyyy/MM/dd hh:mm:ss");       qDebug() << "最初批改日期:"<<info.lastModified().toString("yyyy-MM-dd hh:mm:ss");       //获取文件名,之后,依据这个文件名找到指定文件,并关上   }); } MainWindow::~MainWindow(){    delete ui;}

四、成果

咱们能够看到咱们的程序中将咱们的日程表关上了,并且在终端打印了这个文件的一些信息,例如:门路、文件名、大小等等