Qt 打开文件列表选择文件,实现拖拽方式打开文件

1. 实现打开文件列表选择文件

1.1. 创建 Qt 工程,并添加几个简单控件

这里笔者选用的是 QMainWindow,创建好工程后在 ui 界面设计中添加 QLineEditQPushBtton至少这两个控件,如下图摆放。

Qt 打开文件列表选择文件,实现拖拽方式打开文件_第1张图片

1.2. 头文件中添加相关操作

mainwindow.h 中添加所要用到的所有头文件。

#include 
#include 
#include 

并声明一个槽函数用于打开文件浏览器。

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 
#include 
#include 

这里是通过重写下面两个函数来实现文件拖拽功能:

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. 效果演示

完成如上函数,运行查看效果。

#完

你可能感兴趣的:(Qt,qt,开发语言)