From 535db496c472cf72c040766b4a310171e8c1d71b Mon Sep 17 00:00:00 2001 From: gaozheng Date: Thu, 11 Jun 2026 12:07:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(ui):=20AnomalyTablePanel=20ds=E7=BA=A7?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E8=A1=A8(=E8=A1=8C=E7=9C=BC=E7=9D=9B?= =?UTF-8?q?=E2=86=92=E9=9A=90=E8=97=8F=E9=9B=86=E4=BF=A1=E5=8F=B7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/CMakeLists.txt | 1 + src/app/panels/AnomalyTablePanel.cpp | 40 ++++++++++++++++++++++++++++ src/app/panels/AnomalyTablePanel.hpp | 23 ++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 src/app/panels/AnomalyTablePanel.cpp create mode 100644 src/app/panels/AnomalyTablePanel.hpp diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index 2024e52..34b7018 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -27,6 +27,7 @@ add_executable(geopro_desktop WIN32 panels/DynamicFormView.cpp panels/ObjectExceptionPanel.cpp panels/chart/DatasetChartView.cpp + panels/AnomalyTablePanel.cpp CentralScene.cpp ProjectListDialog.cpp SettingsDialog.cpp) diff --git a/src/app/panels/AnomalyTablePanel.cpp b/src/app/panels/AnomalyTablePanel.cpp new file mode 100644 index 0000000..84c7c0b --- /dev/null +++ b/src/app/panels/AnomalyTablePanel.cpp @@ -0,0 +1,40 @@ +#include "panels/AnomalyTablePanel.hpp" +#include +#include +#include +#include +namespace geopro::app { +static QString markName(int t) { return t == 1 ? "点" : t == 3 ? "多边形" : "多段线"; } + +AnomalyTablePanel::AnomalyTablePanel(QWidget* parent) : QWidget(parent) { + auto* lay = new QVBoxLayout(this); lay->setContentsMargins(0, 0, 0, 0); + table_ = new QTableWidget(this); + table_->setColumnCount(6); + table_->setHorizontalHeaderLabels({"名称", "异常类型", "几何类型", "创建时间", "备注", "操作"}); + table_->horizontalHeader()->setStretchLastSection(true); + table_->setEditTriggers(QAbstractItemView::NoEditTriggers); + lay->addWidget(table_); +} + +void AnomalyTablePanel::setAnomalies(const std::vector& list, + const std::vector& createTimes, + const std::vector& remarks) { + hidden_.clear(); + table_->setRowCount(static_cast(list.size())); + for (int i = 0; i < static_cast(list.size()); ++i) { + const auto& a = list[i]; + table_->setItem(i, 0, new QTableWidgetItem(QString::fromStdString(a.name))); + table_->setItem(i, 1, new QTableWidgetItem(QString::fromStdString(a.typeName))); + table_->setItem(i, 2, new QTableWidgetItem(markName(static_cast(a.markType)))); + table_->setItem(i, 3, new QTableWidgetItem(i < (int)createTimes.size() ? createTimes[i] : "")); + table_->setItem(i, 4, new QTableWidgetItem(i < (int)remarks.size() ? remarks[i] : "")); + auto* eye = new QToolButton(table_); eye->setCheckable(true); eye->setChecked(true); + eye->setText("👁"); + connect(eye, &QToolButton::toggled, this, [this, i](bool on) { + if (on) hidden_.erase(i); else hidden_.insert(i); + emit hiddenChanged(hidden_); + }); + table_->setCellWidget(i, 5, eye); + } +} +} // namespace geopro::app diff --git a/src/app/panels/AnomalyTablePanel.hpp b/src/app/panels/AnomalyTablePanel.hpp new file mode 100644 index 0000000..b765759 --- /dev/null +++ b/src/app/panels/AnomalyTablePanel.hpp @@ -0,0 +1,23 @@ +#pragma once +#include +#include +#include +#include "model/Anomaly.hpp" +class QTableWidget; +namespace geopro::app { + +// ds 级异常表:名称/异常类型/几何类型/创建时间/备注/操作(显隐眼睛)。行显隐 → 信号驱动图表叠加。 +class AnomalyTablePanel : public QWidget { + Q_OBJECT +public: + explicit AnomalyTablePanel(QWidget* parent = nullptr); + void setAnomalies(const std::vector& list, + const std::vector& createTimes, + const std::vector& remarks); +signals: + void hiddenChanged(const std::set& hiddenIndices); +private: + QTableWidget* table_; + std::set hidden_; +}; +} // namespace geopro::app