基于QT5的文件读取程序的实现

目录
  • 一、文件读写操作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;
}

四、效果

我们可以看到我们的程序中将我们的日程表打开了,并且在终端打印了这个文件的一些信息,例如:路径、文件名、大小等等

到此这篇关于基于QT5的文件读取程序的实现的文章就介绍到这了,更多相关QT5 文件读取内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • PyQt5组件读取参数的实例

    1.QLineEdit QLineEdit.text() #输出str类型 2.QCheckBox QCheckBox.checkState() #状态 选定: int(QCheckBox.checkState())==2 #未选定: int(QCheckBox.checkState())==0 3.QComboBox QComboBox.currentText() #输出str类型 4,QDateEdit QDateEdit.date() """ 输出QCore.QDate

  • pyqt5+opencv 实现读取视频数据的方法

    1.openCV读取视频数据 import cv2 if __name__ == '__main__': videoPath = "./dataSet/3700000000003_13-38-20.055.mp4" nameWindow = "Detection window" # 窗体名称 cv2.namedWindow(nameWindow) # 设置窗体 capture = cv2.VideoCapture(videoPath) if capture.isOp

  • 基于QT5的文件读取程序的实现

    目录 一.文件读写操作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

  • 基于C#实现XML文件读取工具类

    本文实例讲述了基于C#实现XML文件读取工具类.分享给大家供大家参考.具体如下: 这是我去年写的一个XML文件读取工具类,现在做了一些调整 基本能满足一般的XML文件读取需求. 更新: 2013年6月26日19:37 Fix了几个Bug,为所有方法添加单元测试,并运行通过:同时调整了几个方法的位置. /// <summary> /// Author: jiangxiaoqiang /// </summary> public class XmlReader { //=========

  • 基于Python实现一个自动关机程序并打包成exe文件

    目录 1.实现效果 2.实现步骤 3.全部代码  Python代码打包exe文件在桌面运行的方式我之前有写,置顶了,也可以参考这里直接阅读:Python打包exe方法 1.实现效果 2.实现步骤 模块导入 import os,sys,time from PyQt5 import QtCore,QtWidgets,QtGui 窗口设置 def pageShow(self,page): #设置窗口的位置和大小 page.setGeometry(400,400,400,200) #设置窗口的标题 pa

  • 如何基于PHP实现微信小程序pdf文件的预览功能

    目录 知识点 问题描述 探索过程 实现思路 最终效果 实现步骤 总结 知识点 微信小程序预览pdf文件 这都是一些实际项目的开发经验,不是东拼西凑的网上水文.如果这篇文章帮到了你,麻烦动动你发财的小手给点个赞,留下个评论. 问题描述 前段时间文库类微信小程序开发中遇到个问题,就是要在小程序中预览阿里云OSS中的pdf文件.微信官方给的方案就一个,就是把文档缓存到本地然后用资源管理器打开. 这样写问题很明显,pdf文件小的话还可以,当pdf文件很大的时候,加载速度就会很慢.而且我只是需要预览单纯的

  • AJAX和JSP实现的基于WEB的文件上传的进度控制代码第1/2页

    1.引言 2.实现代码 2.1.服务器端代码 2.1.1. 文件上传状态类(FileUploadStatus) 2.1.2. 文件上传状态侦听类(FileUploadListener) 2.1.3. 后台服务类(BackGroundService) 2.1.4. 文件上传状态控制类(BeanControler) 2.2. 客户端代码 2.2.1. AjaxWrapper.js 2.2.2. fileUpload.html 2.2.3. result.jsp 2.2.4. fileUpload.c

  • 基于PHP常用文件函数和目录函数整理

    一.常用文件函数库 1.basename(); -- 返回路径中的文件名部分. string basename ( string $path [, string $suffix ] ) //给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名. 参数:path 一个路径.在 Windows 中,斜线(/)和反斜线(\)都可以用作目录分隔符.在其它环境下是斜线(/) suffix 如果文件名是以 suffix 结束的,那这一部分也会被去掉. 返回值:返回 path 的基本的文件名.

  • Java中的字节流文件读取教程(一)

    前言 上篇文章我们介绍了抽象化磁盘文件的 File 类型,它仅仅用于抽象化描述一个磁盘文件或目录,却不具备访问和修改一个文件内容的能力. Java 的 IO 流就是用于读写文件内容的一种设计,它能完成将磁盘文件内容输出到内存或者是将内存数据输出到磁盘文件的数据传输工作. Java IO 流的设计并不是完美的,设计了大量的类,增加了我们对于 IO 流的理解,但无外乎为两大类,一类是针对二进制文件的字节流,另一类是针对文本文件的字符流.而本篇我们就先来学习有关字节流的相关类型的原理以及使用场景等细节

  • 基于Vue实现微信小程序的图文编辑器

    由于微信小程序不能使用常规的图文编辑器(比如百度的UEditor )编辑新闻内容之类的,所以用vue写了个针对小程序用的图文编辑器.效果如下 多图上传图片用到了  ajaxfileupload.js (不知道哪位仁兄写的,拿来用了,很好用) 最终形成一串Json数据(转成字符串,传入后台存入数据库,小程序端用JSON.parse 转成JSON ,按照后台一样的方式渲染即可[小程序端代码还没写,后面再贴出来吧]) json格式如 [{"mytype":1,"content&qu

  • C++项目基于HuffmanTree实现文件的压缩与解压缩功能

    目录 前言 一.文件压缩 1.文件压缩的概念 2.为什么需要压缩 3.压缩的分类 4.压缩的方法 二.HuffmanTree文件压缩与解压缩 1.HuffmanTree的概念 2.HuffmanTree的构建 3.文件压缩 4.文件解压缩 三.HuffmanTree压缩解压缩碰到的问题 1.创建优先级队列要使用自己写的仿函数 2.自定义类型结构体类型相加和仿函数要重载operator+和operator> 3.剔除在HuffmanTree出现0次的字符,不用统计出现0次的字符 4.如果在解压缩时

  • 基于QT5实现一个时钟桌面

    目录 介绍 实现代码 clock.pro analogclock.h analogclock.cpp main.cpp 编译打包 编译 打包 介绍 这是一个简单的时钟运行界面,项目的结构如图所示,主要包含一个头文件:** analogclock.h **,两个源文件: ** analogclock.cpp main.cpp **. 看完本教程,你就可以知悉在Windows系统上如何实现一个界面程序并部署在Windows系统上. 实现代码 clock.pro QT += core gui grea

随机推荐