QFileDialog 类
QFileDialog 是 Qt 库中的一个类,用于提供文件选择对话框,
允许用户选择文件或目录。QFileDialog 提供了多种静态方法和实例方法,
用于创建和配置文件对话框,并获取用户选择的文件或目录。
QObject
└── QWidget
└── QDialog
└── QFileDialog
QObject:所有 Qt 对象的基类,提供对象树管理、信号和槽机制、事件处理等核心功能。
QWidget:所有用户界面组件的基类,提供基本的窗口功能。
QDialog:用于创建对话框窗口,通常用于与用户进行交互。
QFileDialog:用于提供文件选择对话框,允许用户选择文件或目录。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QBoxLayout>
#include <QFileDialog>
#include <QLineEdit>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QLabel * FileNameLabel;
QLineEdit * FileNameLineEdit;
QPushButton * OpenButton;
QLabel * FilesizeLabel;
QLineEdit * FilesizeLineEdit;
QPushButton * FilesizeButton;
Ui::MainWindow *ui;
private slots:
void GetFileInfo();
void GetFilesize();
};
#endif // MAINWINDOW_H
#include <QMessageBox>
#include "mainwindow.h"
#include "./ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建Qdialog窗体设置垂直布局
//创建Qlabel控件
QDialog *dialog = new QDialog(this);
dialog->setWindowTitle("Dialog");
//dialog->resize(400, 600);
//设置背景颜色
//dialog->setStyleSheet("background-color: rgb(25, 210, 55);");
//设置dialog布局
QGridLayout *vboxLayout = new QGridLayout(dialog);
FileNameLabel =new QLabel("文件名:", dialog);
FileNameLineEdit=new QLineEdit(dialog);
OpenButton=new QPushButton("打开文件", dialog);
//创建水平布局
QHBoxLayout *hboxLayout = new QHBoxLayout();
hboxLayout->addWidget(FileNameLabel);
hboxLayout->addWidget(FileNameLineEdit);
hboxLayout->addWidget(OpenButton);
//添加到vboxLayout
vboxLayout->addLayout(hboxLayout, 0, 0 );
FilesizeLabel =new QLabel("文件大小:", dialog);
FilesizeLineEdit=new QLineEdit(dialog);
QHBoxLayout *hboxLayout2 = new QHBoxLayout();
hboxLayout2->addWidget(FilesizeLabel);
hboxLayout2->addWidget(FilesizeLineEdit);
vboxLayout->addLayout(hboxLayout2, 1, 0 );
FilesizeButton=new QPushButton("获取文件大小", dialog);
vboxLayout->addWidget(FilesizeButton, 2, 0);
//设置信号槽
connect(OpenButton, SIGNAL(clicked()), this, SLOT(GetFileInfo()));
connect(FilesizeButton, SIGNAL(clicked()), this, SLOT(GetFilesize()));
dialog->show();
}
void MainWindow::GetFileInfo(){
//打开一个文件选择对话框
QString fileName = QFileDialog::getOpenFileName(this, "打开文件", "", "All Files (*)");
//判断文件是否存在
if (fileName.isEmpty()) {
QMessageBox::warning(this, "警告", "请选择文件");
return;
}
//显示文件名
FileNameLineEdit->setText(fileName);
}
void MainWindow::GetFilesize(){
//获取文件大小
QString fileName = FileNameLineEdit->text();//获取文件名
QFile file(fileName);//打开文件
//判断文件是否存在
if (!file.open(QIODevice::ReadOnly)) {
QMessageBox::warning(this, "警告", "打开文件失败");
return;
}
//获取文件大小
qint64 size = file.size();
//显示文件大小
FilesizeLineEdit->setText(QString::number(size/1024.00, 'f', 2) + "KB");//这里代码计算了文件大小,单位为KB float型 保留两位小数
file.close();
}
MainWindow::~MainWindow()
{
delete ui;
}