0
点赞
收藏
分享

微信扫一扫

为什么型类型信息可以通过匿名内部类来保存

小飞侠熙熙 04-02 15:00 阅读 1

目录

一、概述

文件操作是应用程序必不可少的部分。Qt作为一一个通用开发库,提供了跨平台的文件操作能力。Qt提供了很多关于文件的类,通过这些类能够对文件系统进行操作,如文件读写、文件信息获取、文件复制或重命名等。

在Qt中,文件读写的类为QFile。QFile 的父类为QFileDevice,QFileDevice 提供了文件交互操作的底层功能。QFileDevice 的父类是QIODevice, QIODevice 的父类为QObject。
QlODevice是Qt中所有输入输出设备(input/output device,简称I/O设备)的基础类, I/0 设备就是能进行数据输入和输出的设备,例如文件是一种I/0设备,网络通信中的socket是I/0设备,串口、蓝牙等通信接口也是I/O设备,所以它们也是从QIODevice继承来的。Qt 中主要的一-些I/O设备
类的继承关系如下图所示:

在这里插入图片描述

  • QFile 是用于文件操作和文件数据读写的类,使用QFile可以读写任意格式的文件。
  • QSaveFile是用于安全保存文件的类。使用QSaveFile保存文件时,它会先把数据写入一个临时文件,成功提交后才将数据写入最终的文件。如果保存过程中出现错误,临时文件里的数据不会被写入最终文件,这样就能确保最终文件中不会丢失数据或被写入部分数据。在保存比较大的文件或复杂格式的文件时可以使用这个类,例如从网络上下载文件等。
  • QTemporaryFile是用于创建临时文件的类。使用函数-QTemporaryFile::open()就能创建一 个文件名唯一的临时文件, 在-QTemporaryFile对象被删除时,临时文件被自动删除。
  • QTcpSocket 和QUdpSocket 是分别实现了TCP和UDP的类。
  • QSerialPort 是实现了串口通信的类, 通过这个类可以实现计算机与 串口设备的通信。
  • QBluetoothSocket 是用于蓝牙通信的类。手机和平板计算机等移动设备有蓝牙通信模块,笔记本电脑一般也有蓝牙通信模块。通QBluetoothSocket类,就可以编写蓝牙通信程。如编程实现笔记本电脑与手机的蓝牙通信。
  • QProcess类用于启动外部程序,并且可以给程序传递参数。
  • QBuffer以一个QByteArray对象作为数据缓冲区,将QByteArray对象当作一个I/O设备来读写。

二、文件读写

在Qt中,文件的读写主要是通过QFile类来实现。在QFile类中提供了-些用来读写文件的方法。对于文件的操作主要有:

  • 读数据: QFile类中提供了多个方法用于读取文件内容;如read()、 readAll()、 readLine()等。
  • 写数据: QFile 类中提供了多个方法用于往文件中写内容;如write()、writeData()等。
  • 关闭文件:文件使用结束后必须用函数close()关闭文件。
    访问一个设备之前,需要使用open()函数打开该设备,而且必须指定正确的打开模式,QlODevice 中所有的打开模式由QlODevice::OpenMode枚举变量定义,其取值如下:

在这里插入图片描述
实例

实现一个简单的记事本,可以查看文件内容,可以保存新的文件
使用之前我们学习过的菜单栏与状态栏,以及一个文本控件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QMenu>
#include<QMenuBar>
#include<QAction>
#include<QPlainTextEdit>
#include<QFileDialog>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //获取菜单栏
    QMenuBar* menuBar = this->menuBar();
    //添加菜单
    QMenu* menu = new QMenu("文件");
    menuBar->addMenu(menu);

    //添加菜单栏选项
    QAction* action_1 = new QAction("打开");
    QAction* action_2 = new QAction("保存");

    menu->addAction(action_1);
    menu->addAction(action_2);

    //输入框
    edit = new QPlainTextEdit();
    this->setCentralWidget(edit);
    QFont font;
    font.setPixelSize(20);
    edit->setFont(font);

    //连接QAction的信号槽
    connect(action_1,&QAction::triggered,this,&MainWindow::handleAction1);
    connect(action_2,&QAction::triggered,this,&MainWindow::handleAction2);

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::handleAction1()
{
    //打开文件,弹出打开文件对话框
    QString path = QFileDialog::getOpenFileName(this);
    //把文件名显示到状态栏中
    QStatusBar* status = this->statusBar();
    status->showMessage(path);
    //根据路径构造QFile对象
    QFile file(path);
    bool result = file.open(QIODevice::ReadOnly);
    if(result==false)
    {
        status->showMessage(path + "打开失败");
        return;
    }
    //读取文件
    QString text = file.readAll();

    //关闭文件
    file.close();
    //读到的内容显示到输入框
    edit->setPlainText(text);
}

void MainWindow::handleAction2()
{
    //弹出保存文件对话框
    QString path = QFileDialog::getSaveFileName();
    //在状态栏中显示这个文件名
    QStatusBar* statusBar = this->statusBar();
    statusBar->showMessage(path);
    //根据选择的路径,构造一个QFile对象,打开文件
    QFile file(path);
    bool result = file.open(QFile::WriteOnly);
    if(!result)
    {
        statusBar->showMessage("打开文件失败");
        return;
    }
    //写文件
    const QString& text = edit->toPlainText();
    file.write(text.toUtf8());
    file.close();
}

实现效果
请添加图片描述

三、文件和目录信息

QFileInfo是Qt提供的一个用于获取文件和目录信息的类,如获取文件名、文件大小、文件修改日期等。QFileInfo类中提供了很多的方法,常用的有:

  • isDir()检查该文件是否是目录;
  • isExecutable()检查该文件是否是可执行文件;
  • fileName()获得文件名;
  • completeBaseName()获取完整的文件名;
  • suffix()获取文件后缀名;
  • completeSuffix()获取完整的文件后缀;
  • size()获取文件大小;
  • isFile()判断是否为文件;
  • fileTime()获取文件创建时间、修改时间、最近访问时间等;

实例
在ui中添加一个pushbutton,实现对应的槽函数,弹出对话框,选择文件,则可以输出文件对应的信息

void Widget::on_pushButton_clicked()
{
    //弹出对话框,获取文件路径
    QString path = QFileDialog::getOpenFileName(this);
    //构造QFileInfo对象
    QFileInfo fileInfo(path);
    //打印文件相关属性
    qDebug()<<fileInfo.fileName();
    qDebug()<<fileInfo.suffix();
    qDebug()<<fileInfo.size();
}

在这里插入图片描述

举报

相关推荐

0 条评论