基于QT5的文件讀取程序的實現(xiàn)
一、文件讀寫操作QFile
QT自帶了一個文件操作的類->QFile ,實驗中也是著重 QFile 的操作
1.1 頭文件
#include<QFile>
1.2 內部函數

這些函數沒必要都去記住,我們只需要記住簡單的例如open()、readLine()、atEnd()、close() 等常用的函數即可
- 首先我們
new一個QFile對象的時候有四種構造方法,通常來說我們傳入 文件的路徑名 就好了 - 然后我們要調用
open()函數,這個函數是告訴操作系統(tǒng)我們通過什么樣的方式打開,例如只讀打開、只寫打開、可讀可寫打開……,這個和我們在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);
//打開文件,注意參數的使用,文件修飾符,文件指針,可以和之前的嵌入式環(huán)境編程的知識聯(lián)系起來,包括 模式操作
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() << "創(chuàng)建日期:" << info.birthTime().toString("yyyy/MM/dd hh:mm:ss");
qDebug() << "最后修改日期:"<<info.lastModified().toString("yyyy-MM-dd hh:mm:ss");
//獲取文件名,之后,根據這個文件名找到指定文件,并打開
});
}
MainWindow::~MainWindow()
{
delete ui;
}
四、效果

我們可以看到我們的程序中將我們的日程表打開了,并且在終端打印了這個文件的一些信息,例如:路徑、文件名、大小等等
到此這篇關于基于QT5的文件讀取程序的實現(xiàn)的文章就介紹到這了,更多相關QT5 文件讀取內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Qt中QTextEdit和QPlainTextEdit控件的實現(xiàn)
本文主要介紹了Qt中QTextEdit和QPlainTextEdit控件的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-04-04
C語言實現(xiàn)通用數據結構之通用集合(HashSet)
這篇文章主要為大家詳細介紹了C語言實現(xiàn)通用數據結構之通用集合,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11

