简述
QFileDialog提供了一个对话框用于选择文件或目录。
QFileDialog让用户可以遍历文件系统目录来选择文件或目录。
使用
创建一个QFileDialog最简单的方式是使用静态函数。如下所示:
fileName = QFileDialog::getOpenFileName(this, tr("选择一张图片"), "C:/Users/jiage/Desktop", tr("Image Files (*.png *.jpg *.bmp)"));
在上面的例子中,我们使用QFileDialog的静态函数创建了一个模态对话框。该对话框初始状态会显示"/home"目录中的内容,并且只会展示那些与字符串"Image Files (*.png *.jpg *.bmp)“所确定的模式想匹配的文件。对话框的父亲被设为this,并且窗口标题为"选择一张图片”
项目示例
软件环境:QT
需求:
1,读取.dat文件并解析,将每个字节的值换行输出并且每行加上字节计数,输出txt文件
2,读取文件通过界面选择文件窗口来实现
3,选择的文件名称显示出来
4,输出的文件需要指定文件路径
ui界面如下:
代码如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFile>
#include <QTextStream>
#include <QDebug>
#include <QFileDialog>
#include <QMessageBox>
void readAndWriteDatFile(const QString &inputFilePath, const QString &outputFilePath);
int i = 0;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void readAndWriteDatFile(const QString &inputFilePath, const QString &outputFilePath) {
QFile inputFile(inputFilePath);
if (!inputFile.open(QIODevice::ReadOnly)) {
qDebug()<<"无法打开输入文件:"<<inputFilePath;
return;
}
QFile outputFile(outputFilePath);
if (!outputFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
qDebug() << "无法打开输出文件:" << outputFilePath;
inputFile.close();
return;
}
QTextStream out(&outputFile);
while (!inputFile.atEnd()) {
char byte;
inputFile.read(&byte, 1);
out << QString::number(i)<< "\t"<<static_cast<int>(static_cast<unsigned char>(byte)) << "\n"; // 将字节转换为10进制并换行
i++;
}
inputFile.close();
outputFile.close();
}
void MainWindow::on_pushButton_2_clicked()
{
fileName = QFileDialog::getOpenFileName(
this,
tr("open a file."),
"D:/",
tr("text files(*.txt *.dat);;All files(*.*)"));
if (fileName.isEmpty()) {
QMessageBox::warning(this, "Warning!", "Failed to open the file!");
}
else {
ui->lineEdit->setText(fileName);
}
}
void MainWindow::on_pushButton_clicked()
{
// QString inputPath = "D:/_PROJECT/2024/temp.dat";
QString inputPath = fileName;
QString outputPath = "D:/_PROJECT/2024/output.txt";
readAndWriteDatFile(inputPath, outputPath);
}
注意:头文件的添加,注意qDebug()中冒号用中文可能会报错。