feat(ui): AnomalyTablePanel ds级异常表(行眼睛→隐藏集信号)
This commit is contained in:
parent
d61775a3bc
commit
535db496c4
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
Loading…
Reference in New Issue