<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
QT自帶了一個檔案操作的類->QFile
,實驗中也是著重 QFile
的操作
#include<QFile>
這些函數沒必要都去記住,我們只需要記住簡單的例如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()
關閉資料流就好了
這裡隨便畫畫就好了,不過可以在文字顯示框插入背景圖,只需要在元件的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>
#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
#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; }
我們可以看到我們的程式中將我們的日程表開啟了,並且在終端列印了這個檔案的一些資訊,例如:路徑、檔名、大小等等
到此這篇關於基於QT5的檔案讀取程式的實現的文章就介紹到這了,更多相關QT5 檔案讀取內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45