feat/dataset-detail-chart #5

Merged
gaozheng merged 74 commits from feat/dataset-detail-chart into main 2026-06-13 17:30:37 +08:00
3 changed files with 64 additions and 0 deletions
Showing only changes of commit 535db496c4 - Show all commits

View File

@ -27,6 +27,7 @@ add_executable(geopro_desktop WIN32
panels/DynamicFormView.cpp panels/DynamicFormView.cpp
panels/ObjectExceptionPanel.cpp panels/ObjectExceptionPanel.cpp
panels/chart/DatasetChartView.cpp panels/chart/DatasetChartView.cpp
panels/AnomalyTablePanel.cpp
CentralScene.cpp CentralScene.cpp
ProjectListDialog.cpp ProjectListDialog.cpp
SettingsDialog.cpp) SettingsDialog.cpp)

View File

@ -0,0 +1,40 @@
#include "panels/AnomalyTablePanel.hpp"
#include <QVBoxLayout>
#include <QTableWidget>
#include <QHeaderView>
#include <QToolButton>
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<geopro::core::Anomaly>& list,
const std::vector<QString>& createTimes,
const std::vector<QString>& remarks) {
hidden_.clear();
table_->setRowCount(static_cast<int>(list.size()));
for (int i = 0; i < static_cast<int>(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<int>(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

View File

@ -0,0 +1,23 @@
#pragma once
#include <set>
#include <vector>
#include <QWidget>
#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<geopro::core::Anomaly>& list,
const std::vector<QString>& createTimes,
const std::vector<QString>& remarks);
signals:
void hiddenChanged(const std::set<int>& hiddenIndices);
private:
QTableWidget* table_;
std::set<int> hidden_;
};
} // namespace geopro::app