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 <QScrollBar>
|
||||
#include <QDragEnterEvent>
|
||||
#include <QDragMoveEvent>
|
||||
#include <QDropEvent>
|
||||
#include <QMimeData>
|
||||
|
||||
@@ -30,6 +31,9 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
config = new ProjectConfig(this);
|
||||
cmakeGenerator = new CMakeGenerator(this);
|
||||
|
||||
// ★ 启用拖拽
|
||||
setAcceptDrops(true);
|
||||
|
||||
setupUI();
|
||||
setupConnections();
|
||||
updateWindowTitle();
|
||||
@@ -276,6 +280,22 @@ void MainWindow::setupUI()
|
||||
|
||||
// 状态栏
|
||||
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()
|
||||
@@ -350,9 +370,27 @@ void MainWindow::dragEnterEvent(QDragEnterEvent *event)
|
||||
if (file.endsWith(".json", Qt::CaseInsensitive)) {
|
||||
event->acceptProposedAction();
|
||||
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)
|
||||
|
||||
@@ -69,6 +69,7 @@ private slots:
|
||||
|
||||
protected:
|
||||
void dragEnterEvent(QDragEnterEvent *event) override;
|
||||
void dragMoveEvent(QDragMoveEvent *event) override;
|
||||
void dropEvent(QDropEvent *event) override;
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user