1. 实现打开文件列表选择文件
1.1. 创建 Qt 工程,并添加几个简单控件
这里笔者选用的是 QMainWindow
,创建好工程后在 ui
界面设计中添加 QLineEdit
、QPushBtton
至少这两个控件,如下图摆放。
1.2. 头文件中添加相关操作
在 mainwindow.h
中添加所要用到的所有头文件。
#include <QString>
#include <QFileDialog>
#include <QStandardPaths>
并声明一个槽函数用于打开文件浏览器。
private slots:
void showFiles(void); // 用于打开文件浏览器
public:
void initUi(void); // 初始化 UI 界面
private:
QString *fileName; // 用于保存文件路径
1.3. 在 cpp 文件中实现
initUi
函数,实现如下:
void ExcelProcess::initUi()
{
this->ui->Lab_FilePath->setText("File Path:");
this->ui->PBtn_View->setText("Open File");
connect(this->ui->PBtn_View, SIGNAL(clicked()), this, SLOT(showFiles()));
}
showFiles
槽函数,实现如下:
void ExcelProcess::showFiles()
{
QString str = QFileDialog::getOpenFileName(this, "File Explorer", QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation),"Excel 文件(*.xls *.xlsx);;All file(*.*)");
this->ui->LEdit_FilePath->setText(str.toUtf8());
*this->fileName = this->ui->LEdit_FilePath->text();
qDebug() << *this->fileName << "\n";
}
1.4. 效果演示
完成如上函数,并在构造函数中调用即可,运行查看效果。
2. 实现文件拖拽的方式加载
我们常常见到涉及文件选择的软件,他们都会支持拖拽的方式选择,由于这样的文件选取方式高度的人性化,因此大多数软件都会提供这样的功能。下面就来看看用 Qt
如何实现吧。
2.1. 添加相关头文件,并声明相关操作函数
添加头文件:
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QMimeData>
这里是通过重写下面两个函数来实现文件拖拽功能:
protected:
void dragEnterEvent(QDragEnterEvent *event); // 拖动进入事件
void dropEvent(QDropEvent *event); // 放下事件
2.2. 在 cpp 文件中实现其具体功能
在构造函数中添加如下代码:
this->setAcceptDrops(true); // 设置主界面接收拖动进来的文件
拖动函数重写:
void ExcelProcess::dragEnterEvent(QDragEnterEvent *event)
{
// 这里对拖拽文件进行筛选,仅支持 xls 或 xlsx 文件,用 compara 函数比较文件后缀
if ((!event->mimeData()->urls()[0].fileName().right(3).compare("xls")) || (!event->mimeData()->urls()[0].fileName().right(4).compare("xlsx"))) {
event->acceptProposedAction();
} else {
event->ignore(); // 若非这两种文件则不接受鼠标事件
}
return ;
}
void ExcelProcess::dropEvent(QDropEvent *event)
{
const QMimeData *qm = event->mimeData();
*this->fileName = qm->urls()[0].toLocalFile(); // 获取拖入的文件名
this->ui->LEdit_FilePath->setText(*this->fileName);
this->movie_01->stop();
this->movie_01->setFileName(":/bk/pic/bk_02.gif");
this->movie_01->start();
return ;
}
2.3. 效果演示
完成如上函数,运行查看效果。