v1.1.4: 修复拖拽 JSON 文件打开工程功能
【Bug 修复】 - setAcceptDrops(true) —— 之前从未设置,导致所有拖拽事件直接被 Qt 忽略 - 新增 dragMoveEvent 覆写 —— 拖拽移动过程也要 accept,否则 dropEvent 不会触发 - 禁用所有子控件的拖拽接收 —— QTreeWidget/QListWidget/QLineEdit 等默认接受拖拽,会先拦截事件导致 MainWindow 收不到 - 同时对 viewport() 禁用拖拽,防止内部滚动区域拦截
This commit is contained in:
@@ -19,6 +19,7 @@
|
|||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QScrollBar>
|
#include <QScrollBar>
|
||||||
#include <QDragEnterEvent>
|
#include <QDragEnterEvent>
|
||||||
|
#include <QDragMoveEvent>
|
||||||
#include <QDropEvent>
|
#include <QDropEvent>
|
||||||
#include <QMimeData>
|
#include <QMimeData>
|
||||||
|
|
||||||
@@ -30,6 +31,9 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
config = new ProjectConfig(this);
|
config = new ProjectConfig(this);
|
||||||
cmakeGenerator = new CMakeGenerator(this);
|
cmakeGenerator = new CMakeGenerator(this);
|
||||||
|
|
||||||
|
// ★ 启用拖拽
|
||||||
|
setAcceptDrops(true);
|
||||||
|
|
||||||
setupUI();
|
setupUI();
|
||||||
setupConnections();
|
setupConnections();
|
||||||
updateWindowTitle();
|
updateWindowTitle();
|
||||||
@@ -276,6 +280,22 @@ void MainWindow::setupUI()
|
|||||||
|
|
||||||
// 状态栏
|
// 状态栏
|
||||||
statusBar()->showMessage("就绪");
|
statusBar()->showMessage("就绪");
|
||||||
|
|
||||||
|
// ★ 禁用子控件的拖拽,让所有拖拽事件由 MainWindow 统一处理
|
||||||
|
sourceTree->setAcceptDrops(false);
|
||||||
|
sourceTree->viewport()->setAcceptDrops(false);
|
||||||
|
includeDirList->setAcceptDrops(false);
|
||||||
|
includeDirList->viewport()->setAcceptDrops(false);
|
||||||
|
libraryList->setAcceptDrops(false);
|
||||||
|
libraryList->viewport()->setAcceptDrops(false);
|
||||||
|
defineList->setAcceptDrops(false);
|
||||||
|
defineList->viewport()->setAcceptDrops(false);
|
||||||
|
optionList->setAcceptDrops(false);
|
||||||
|
optionList->viewport()->setAcceptDrops(false);
|
||||||
|
projectNameEdit->setAcceptDrops(false);
|
||||||
|
compilerPathEdit->setAcceptDrops(false);
|
||||||
|
assemblerPathEdit->setAcceptDrops(false);
|
||||||
|
linkerPathEdit->setAcceptDrops(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::setupConnections()
|
void MainWindow::setupConnections()
|
||||||
@@ -350,9 +370,27 @@ void MainWindow::dragEnterEvent(QDragEnterEvent *event)
|
|||||||
if (file.endsWith(".json", Qt::CaseInsensitive)) {
|
if (file.endsWith(".json", Qt::CaseInsensitive)) {
|
||||||
event->acceptProposedAction();
|
event->acceptProposedAction();
|
||||||
statusBar()->showMessage("📂 释放鼠标打开工程:" + file, 3000);
|
statusBar()->showMessage("📂 释放鼠标打开工程:" + file, 3000);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
event->ignore();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::dragMoveEvent(QDragMoveEvent *event)
|
||||||
|
{
|
||||||
|
// 拖拽移动时也要接受,否则 Qt 不会触发 dropEvent
|
||||||
|
if (event->mimeData()->hasUrls()) {
|
||||||
|
QList<QUrl> urls = event->mimeData()->urls();
|
||||||
|
if (!urls.isEmpty()) {
|
||||||
|
QString file = urls.first().toLocalFile();
|
||||||
|
if (file.endsWith(".json", Qt::CaseInsensitive)) {
|
||||||
|
event->acceptProposedAction();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
event->ignore();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::dropEvent(QDropEvent *event)
|
void MainWindow::dropEvent(QDropEvent *event)
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ private slots:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void dragEnterEvent(QDragEnterEvent *event) override;
|
void dragEnterEvent(QDragEnterEvent *event) override;
|
||||||
|
void dragMoveEvent(QDragMoveEvent *event) override;
|
||||||
void dropEvent(QDropEvent *event) override;
|
void dropEvent(QDropEvent *event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
Reference in New Issue
Block a user