十六、文件对话框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));
}