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. 効果実証
上記の関数を完了し、実行して効果を確認します。