From b8c74962e85192e1d6e9164ed3fd6393894d4330 Mon Sep 17 00:00:00 2001 From: gaozheng Date: Thu, 11 Jun 2026 12:08:13 +0800 Subject: [PATCH] =?UTF-8?q?feat(ui):=20DatasetDetailPage=20=E5=8E=9F?= =?UTF-8?q?=E6=95=B0=E6=8D=AE/=E7=BD=91=E6=A0=BC=E5=88=87=E6=8D=A2+?= =?UTF-8?q?=E5=8F=A0=E5=8A=A0=E5=BC=80=E5=85=B3+=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E8=81=94=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/CMakeLists.txt | 1 + src/app/panels/DatasetDetailPage.cpp | 52 ++++++++++++++++++++++++++++ src/app/panels/DatasetDetailPage.hpp | 22 ++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 src/app/panels/DatasetDetailPage.cpp create mode 100644 src/app/panels/DatasetDetailPage.hpp diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index 34b7018..328fd2b 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -28,6 +28,7 @@ add_executable(geopro_desktop WIN32 panels/ObjectExceptionPanel.cpp panels/chart/DatasetChartView.cpp panels/AnomalyTablePanel.cpp + panels/DatasetDetailPage.cpp CentralScene.cpp ProjectListDialog.cpp SettingsDialog.cpp) diff --git a/src/app/panels/DatasetDetailPage.cpp b/src/app/panels/DatasetDetailPage.cpp new file mode 100644 index 0000000..6a2f901 --- /dev/null +++ b/src/app/panels/DatasetDetailPage.cpp @@ -0,0 +1,52 @@ +#include "panels/DatasetDetailPage.hpp" +#include +#include +#include +#include +#include +#include +#include "panels/chart/DatasetChartView.hpp" +#include "panels/AnomalyTablePanel.hpp" +namespace geopro::app { + +DatasetDetailPage::DatasetDetailPage(QWidget* parent) : QWidget(parent) { + auto* lay = new QVBoxLayout(this); + auto* bar = new QHBoxLayout(); + auto* origin = new QToolButton(this); origin->setText("原数据"); origin->setCheckable(true); + auto* grid = new QToolButton(this); grid->setText("网格数据"); grid->setCheckable(true); + grid->setChecked(true); + auto* grp = new QButtonGroup(this); grp->setExclusive(true); grp->addButton(origin); grp->addButton(grid); + auto* showAnom = new QCheckBox("显示异常", this); showAnom->setChecked(true); + auto* showLines = new QCheckBox("显示等值线", this); showLines->setChecked(true); + bar->addWidget(origin); bar->addWidget(grid); bar->addStretch(); + bar->addWidget(showAnom); bar->addWidget(showLines); + lay->addLayout(bar); + + chart_ = new DatasetChartView(this); + anomalyTable_ = new AnomalyTablePanel(this); + lay->addWidget(chart_, 3); + lay->addWidget(anomalyTable_, 1); + + connect(grid, &QToolButton::clicked, this, [this] { gridMode_ = true; showGridMode(); }); + connect(origin, &QToolButton::clicked, this, [this] { gridMode_ = false; showScatterMode(); }); + connect(showAnom, &QCheckBox::toggled, chart_, [this](bool on) { chart_->setShowAnomalies(on); }); + connect(showLines, &QCheckBox::toggled, chart_, [this](bool on) { + chart_->setShowContourLines(on); if (gridMode_) showGridMode(); }); + connect(anomalyTable_, &AnomalyTablePanel::hiddenChanged, chart_, + [this](const std::set& h) { chart_->setHiddenAnomalies(h); }); +} + +void DatasetDetailPage::setData(const geopro::controller::DatasetDetailController::ChartData& d) { + dsId_ = d.dsId; data_ = d; + chart_->setAnomalies(d.anomalies); + anomalyTable_->setAnomalies(d.anomalies, {}, {}); // 创建时间/备注可后续从 VO 补 + if (gridMode_) showGridMode(); else showScatterMode(); +} +void DatasetDetailPage::showGridMode() { + geopro::render::ContourOptions opt; // 默认 2x+smooth+simplify0.5 + chart_->showContour(data_.grid, data_.gridScale, opt); +} +void DatasetDetailPage::showScatterMode() { + chart_->showScatter(data_.scatter, data_.scatterScale); +} +} // namespace geopro::app diff --git a/src/app/panels/DatasetDetailPage.hpp b/src/app/panels/DatasetDetailPage.hpp new file mode 100644 index 0000000..72b6727 --- /dev/null +++ b/src/app/panels/DatasetDetailPage.hpp @@ -0,0 +1,22 @@ +#pragma once +#include +#include "DatasetDetailController.hpp" // ChartData +namespace geopro::app { +class DatasetChartView; class AnomalyTablePanel; + +// 单个数据集详情页:标题 + 原数据/网格数据 切换 + 叠加开关 + 图表 + 异常表。 +class DatasetDetailPage : public QWidget { + Q_OBJECT +public: + explicit DatasetDetailPage(QWidget* parent = nullptr); + void setData(const geopro::controller::DatasetDetailController::ChartData& d); + QString dsId() const { return dsId_; } +private: + void showScatterMode(); void showGridMode(); + QString dsId_; + geopro::controller::DatasetDetailController::ChartData data_; + DatasetChartView* chart_; + AnomalyTablePanel* anomalyTable_; + bool gridMode_ = true; +}; +} // namespace geopro::app