Qt はファイルリストを開き、ファイルを選択し、ファイルを開くためのドラッグアンドドロップメソッドを実装します。

1. ファイルリストを開く機能を実装し、ファイルを選択します

1.1. Qt プロジェクトを作成し、いくつかの簡単なコントロールを追加します

ここで選択するのは、以下に示すように、QMainWindowプロジェクトの作成後にuiインターフェイス設計に少なくともこれら 2 つのコントロール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>

ここでは、次の 2 つの関数を書き換えることで、ファイルのドラッグ アンド ドロップ機能を実装します。

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. 効果実証

上記の関数を完了し、実行して効果を確認します。

画像の説明を追加してください

#以上

おすすめ

転載: blog.csdn.net/qq_36393978/article/details/132492246