Skip to content

Commit 7177651

Browse files
committed
功能:
接受文件拖放到主窗口
1 parent cb5e2d6 commit 7177651

File tree

2 files changed

+57
-21
lines changed

2 files changed

+57
-21
lines changed

widget.cpp

+50-21
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
#include <QMimeData>
2+
13
#include "widget.h"
4+
#include "qmimedata.h"
25
#include "ui_widget.h"
36

47
Widget::Widget(QWidget *parent)
@@ -15,6 +18,7 @@ Widget::Widget(QWidget *parent)
1518
isFirstRun_ = true;
1619

1720
// this->setStyleSheet("QToolTip { color: #ffffff; background-color: #666666; border: 1px solid white; }");
21+
setAcceptDrops(true);
1822
}
1923

2024
void Widget::fileTableInit()
@@ -197,33 +201,18 @@ void Widget::on_addFileButton_clicked()
197201

198202
for (int i = 0; i < files.size(); i++)
199203
{
200-
if (!files[i].isEmpty()) {
201-
auto result = observedFiles_.insert(files[i]);
202-
if (result.second)
203-
{
204-
int row = ui->fileTableWidget->rowCount();
205-
qDebug() << "Selected file:" << files[i] << ", insert to row " << row;
206-
ui->fileTableWidget->insertRow(row);
207-
208-
ui->fileTableWidget->setItem(row, 0, new QTableWidgetItem(files[i]));
209-
QString newName = getNewName(files[i], row);
210-
ui->fileTableWidget->setItem(row, 1, new QTableWidgetItem(newName));
211-
ui->fileTableWidget->setItem(row, 2, new QTableWidgetItem("还未执行"));
212-
213-
// ui->fileTableWidget->setItem(row, column, item);
214-
}
215-
else
216-
{
217-
qDebug() << "Selected file:" << files[i] << " already exists, do nothing";
218-
}
204+
if (!files[i].isEmpty())
205+
{
206+
insertToFileTable(files[i]);
219207
}
220208
}
221209
}
222210

223211

224212
void Widget::on_renameButton_clicked()
225213
{
226-
for (int row = 0; row < ui->fileTableWidget->rowCount(); ++row) {
214+
for (int row = 0; row < ui->fileTableWidget->rowCount(); ++row)
215+
{
227216
// 重命名
228217
QTableWidgetItem *sourceItem = ui->fileTableWidget->item(row, 0);
229218
QTableWidgetItem *destItem = ui->fileTableWidget->item(row, 1);
@@ -247,7 +236,8 @@ void Widget::on_renameButton_clicked()
247236

248237
void Widget::refreshData()
249238
{
250-
for (int row = 0; row < ui->fileTableWidget->rowCount(); ++row) {
239+
for (int row = 0; row < ui->fileTableWidget->rowCount(); ++row)
240+
{
251241
// 重命名
252242
QTableWidgetItem *sourceItem = ui->fileTableWidget->item(row, 0);
253243
QTableWidgetItem *destItem = ui->fileTableWidget->item(row, 1);
@@ -402,3 +392,42 @@ void Widget::on_rmFileButton_clicked()
402392
}
403393
}
404394

395+
void Widget::dragEnterEvent(QDragEnterEvent *event){
396+
if (event->mimeData()->hasUrls()) {
397+
event->acceptProposedAction(); // 接受拖放事件
398+
}
399+
}
400+
401+
void Widget::dropEvent(QDropEvent *event){
402+
const QMimeData *mimeData = event->mimeData();
403+
if (mimeData->hasUrls())
404+
{
405+
QList<QUrl> urlList = mimeData->urls();
406+
for (const QUrl &url : urlList)
407+
{
408+
QString filePath = url.toLocalFile(); // 获取文件路径
409+
insertToFileTable(filePath);
410+
}
411+
event->acceptProposedAction();
412+
}
413+
}
414+
415+
void Widget::insertToFileTable(QString& filePath)
416+
{
417+
auto result = observedFiles_.insert(filePath);
418+
if (result.second)
419+
{
420+
int row = ui->fileTableWidget->rowCount();
421+
qDebug() << "insert file:" << filePath << ", insert to row " << row;
422+
ui->fileTableWidget->insertRow(row);
423+
424+
ui->fileTableWidget->setItem(row, 0, new QTableWidgetItem(filePath));
425+
QString newName = getNewName(filePath, row);
426+
ui->fileTableWidget->setItem(row, 1, new QTableWidgetItem(newName));
427+
ui->fileTableWidget->setItem(row, 2, new QTableWidgetItem("还未执行"));
428+
}
429+
else
430+
{
431+
qDebug() << "insert file:" << filePath << " already exists, do nothing";
432+
}
433+
}

widget.h

+7
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
#include <QRegularExpression>
99
#include <QRegularExpressionValidator>
1010
#include <QToolTip>
11+
#include <QDropEvent>
12+
1113
#include <set>
1214

1315
QT_BEGIN_NAMESPACE
@@ -64,12 +66,17 @@ private slots:
6466

6567
void on_rmFileButton_clicked();
6668

69+
protected:
70+
void dragEnterEvent(QDragEnterEvent *event);
71+
void dropEvent(QDropEvent *event);
72+
6773
private:
6874
void fileTableInit();
6975
void replacePartInit();
7076
void suffixPartInit();
7177
void addIndexPartInit();
7278
void refreshData();
79+
void insertToFileTable(QString& filePath);
7380

7481
Ui::Widget *ui;
7582
bool isFirstRun_ = true;

0 commit comments

Comments
 (0)