feat(ui): DatasetDetailPanel 多Tab壳(按dsId去重+反向联动信号)

This commit is contained in:
gaozheng 2026-06-11 12:09:38 +08:00
parent b8c74962e8
commit 88d2fea9df
3 changed files with 50 additions and 0 deletions

View File

@ -29,6 +29,7 @@ add_executable(geopro_desktop WIN32
panels/chart/DatasetChartView.cpp panels/chart/DatasetChartView.cpp
panels/AnomalyTablePanel.cpp panels/AnomalyTablePanel.cpp
panels/DatasetDetailPage.cpp panels/DatasetDetailPage.cpp
panels/DatasetDetailPanel.cpp
CentralScene.cpp CentralScene.cpp
ProjectListDialog.cpp ProjectListDialog.cpp
SettingsDialog.cpp) SettingsDialog.cpp)

View File

@ -0,0 +1,30 @@
#include "panels/DatasetDetailPanel.hpp"
#include "panels/DatasetDetailPage.hpp"
namespace geopro::app {
DatasetDetailPanel::DatasetDetailPanel(QWidget* parent) : QTabWidget(parent) {
setTabsClosable(true);
connect(this, &QTabWidget::tabCloseRequested, this, [this](int i) { delete widget(i); });
connect(this, &QTabWidget::currentChanged, this, [this](int i) {
if (auto* p = qobject_cast<DatasetDetailPage*>(widget(i)))
emit activeDatasetChanged(p->dsId());
});
}
DatasetDetailPage* DatasetDetailPanel::pageFor(const QString& dsId) const {
for (int i = 0; i < count(); ++i)
if (auto* p = qobject_cast<DatasetDetailPage*>(widget(i)))
if (p->dsId() == dsId) return p;
return nullptr;
}
void DatasetDetailPanel::openOrUpdate(const geopro::controller::DatasetDetailController::ChartData& d) {
auto* p = pageFor(d.dsId);
if (!p) { p = new DatasetDetailPage(this); addTab(p, d.dsId); } // 标题后续可换 ds 名
p->setData(d);
setCurrentWidget(p);
}
void DatasetDetailPanel::focusDataset(const QString& dsId) {
if (auto* p = pageFor(dsId)) setCurrentWidget(p);
}
} // namespace geopro::app

View File

@ -0,0 +1,19 @@
#pragma once
#include <QTabWidget>
#include "DatasetDetailController.hpp"
namespace geopro::app {
class DatasetDetailPage;
// 多 Tab 壳:每数据集一页(按 dsId 去重)。R095。
class DatasetDetailPanel : public QTabWidget {
Q_OBJECT
public:
explicit DatasetDetailPanel(QWidget* parent = nullptr);
void openOrUpdate(const geopro::controller::DatasetDetailController::ChartData& d); // 双击/数据到达
void focusDataset(const QString& dsId); // 单击聚焦已开页
signals:
void activeDatasetChanged(const QString& dsId); // 反向联动数据集列表
private:
DatasetDetailPage* pageFor(const QString& dsId) const;
};
} // namespace geopro::app