共计 4247 个字符,预计需要花费 11 分钟才能阅读完成。
目录
一、文件读写操作 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_NAMESPACE
namespace 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;}
四、成果
咱们能够看到咱们的程序中将咱们的日程表关上了,并且在终端打印了这个文件的一些信息,例如:门路、文件名、大小等等