十六、文件对话框

十六、文件对话框QFileDialog

完成以下功能

创建一个QDialog工程。创建的类名为fileDialog。

fileDialog.h

#ifndef FILEDIALOG_H
#define FILEDIALOG_H

#include <QDialog>

#include<QLabel>
#include<QPushButton>
#include<QLineEdit>
#include<QHBoxLayout>
#include<QVBoxLayout>
#include<QFileDialog>

QT_BEGIN_NAMESPACE
namespace Ui { class fileDialog; }
QT_END_NAMESPACE

class fileDialog : public QDialog
{
    Q_OBJECT

public:
    fileDialog(QWidget *parent = nullptr);
    ~fileDialog();

private:
    Ui::fileDialog *ui;

    QLabel *fileNameLabel;
    QLineEdit *fileNameLineEdit;
    QPushButton *fileButton;

    QLabel *fileSizeLabel;
    QLineEdit *fileSizeLineEdit;
    QPushButton *fileInfoButton;

private slots:
    void fileInfoFunc();
    void fileSizeFunc();
};
#endif // FILEDIALOG_H

fileDialog.cpp

创建对象,并且设置布局

    fileNameLabel=new QLabel("文件名称:");
    fileNameLineEdit=new QLineEdit();
    fileButton=new QPushButton("选择..");

    fileSizeLabel=new QLabel("文件大小:");
    fileSizeLineEdit=new QLineEdit();
    fileInfoButton=new QPushButton("获取文件大小信息");

    QGridLayout *gl=new QGridLayout();
    gl->addWidget(fileNameLabel,0,0);
    gl->addWidget(fileNameLineEdit,0,1);
    gl->addWidget(fileButton,0,2);
    gl->addWidget(fileSizeLabel,1,0);
    gl->addWidget(fileSizeLineEdit,1,1,1,2);

    QHBoxLayout *hbl=new QHBoxLayout();
    hbl->addWidget(fileInfoButton);

    QVBoxLayout *vbl=new QVBoxLayout(this);
    vbl->addLayout(gl);
    vbl->addLayout(hbl);

接下来设置槽函数

首先是fileInfoFunc()函数

void fileDialog::fileInfoFunc()
{
    QString fileName=QFileDialog::getOpenFileName(this,"打开","/","Files(*)");
    fileNameLineEdit->setText(fileName);
}

QString QFileDialog::getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options()):

这是一个方便的静态函数,用于返回用户选择的现有文件。如果用户按“取消”,则返回一个 null 字符串。

设置fileSizeFunc()函数

void fileDialog::fileSizeFunc()
{
    QString strFileSize=fileNameLineEdit->text();
    QFileInfo fileInfo(strFileSize);
    qint64 fileSize=fileInfo.size();
    fileSizeLineEdit->setText(QString::number(fileSize));
}

QFileInfo :

提供有关文件在文件系统中的名称 位置 (路径)、访问权限及它是目录还是符号链接、等信息。文件的大小、最后修改/读取时间也是可用的。QFileInfo 也可以被用于获取信息有关 Qt resource .

QFileInfo:: QFileInfo (const QString file ) :

构造一个新的 QFileInfo,它提供有关给定文件的信息。 该文件还可以包含绝对路径或相对路径。

 完整代码

#include "filedialog.h"
#include "ui_filedialog.h"

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

    fileNameLabel=new QLabel("文件名称:");
    fileNameLineEdit=new QLineEdit();
    fileButton=new QPushButton("选择..");

    fileSizeLabel=new QLabel("文件大小:");
    fileSizeLineEdit=new QLineEdit();
    fileInfoButton=new QPushButton("获取文件大小信息");

    QGridLayout *gl=new QGridLayout();
    gl->addWidget(fileNameLabel,0,0);
    gl->addWidget(fileNameLineEdit,0,1);
    gl->addWidget(fileButton,0,2);
    gl->addWidget(fileSizeLabel,1,0);
    gl->addWidget(fileSizeLineEdit,1,1,1,2);

    QHBoxLayout *hbl=new QHBoxLayout();
    hbl->addWidget(fileInfoButton);

    QVBoxLayout *vbl=new QVBoxLayout(this);
    vbl->addLayout(gl);
    vbl->addLayout(hbl);

    connect(fileButton,&QPushButton::clicked,this,&fileDialog::fileInfoFunc);
    connect(fileInfoButton,&QPushButton::clicked,this,&fileDialog::fileSizeFunc);
}

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

void fileDialog::fileInfoFunc()
{
    QString fileName=QFileDialog::getOpenFileName(this,"打开","/","Files(*)");
    fileNameLineEdit->setText(fileName);
}

void fileDialog::fileSizeFunc()
{
    QString strFileSize=fileNameLineEdit->text();
    QFileInfo fileInfo(strFileSize);
    qint64 fileSize=fileInfo.size();
    fileSizeLineEdit->setText(QString::number(fileSize));
}

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mo Yan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值