10 #include <QHBoxLayout>
11 #include <QHeaderView>
12 #include <QPushButton>
13 #include <QTableWidget>
14 #include <QVBoxLayout>
23 void ecvCustomLabelsWidget::setupUI() {
24 QVBoxLayout* mainLayout =
new QVBoxLayout(
this);
25 mainLayout->setContentsMargins(0, 0, 0, 0);
26 mainLayout->setSpacing(4);
29 m_table =
new QTableWidget(0, 2,
this);
30 m_table->setHorizontalHeaderLabels(QStringList()
31 << tr(
"Value") << tr(
"Label"));
32 m_table->horizontalHeader()->setStretchLastSection(
true);
33 m_table->setSelectionBehavior(QAbstractItemView::SelectRows);
34 m_table->setMinimumHeight(120);
35 m_table->setMaximumHeight(200);
36 mainLayout->addWidget(m_table);
39 QHBoxLayout* buttonLayout =
new QHBoxLayout();
40 buttonLayout->setContentsMargins(0, 0, 0, 0);
42 m_addButton =
new QPushButton(tr(
"Add"),
this);
43 m_removeButton =
new QPushButton(tr(
"Remove"),
this);
45 connect(m_addButton, &QPushButton::clicked,
this,
46 &ecvCustomLabelsWidget::onAddButtonClicked);
47 connect(m_removeButton, &QPushButton::clicked,
this,
48 &ecvCustomLabelsWidget::onRemoveButtonClicked);
50 buttonLayout->addWidget(m_addButton);
51 buttonLayout->addWidget(m_removeButton);
52 buttonLayout->addStretch();
54 mainLayout->addLayout(buttonLayout);
57 void ecvCustomLabelsWidget::onAddButtonClicked() {
58 int row = m_table->rowCount();
59 m_table->insertRow(row);
62 QTableWidgetItem* valueItem =
new QTableWidgetItem(
"0.0");
63 m_table->setItem(row, 0, valueItem);
66 QTableWidgetItem* labelItem =
new QTableWidgetItem(
"");
67 m_table->setItem(row, 1, labelItem);
70 m_table->selectRow(row);
72 m_table->editItem(valueItem);
75 void ecvCustomLabelsWidget::onRemoveButtonClicked() {
76 QList<QTableWidgetSelectionRange> ranges = m_table->selectedRanges();
77 if (ranges.isEmpty()) {
79 if (m_table->rowCount() > 0) {
80 m_table->removeRow(m_table->rowCount() - 1);
84 QList<int> rowsToRemove;
85 for (
const QTableWidgetSelectionRange& range : ranges) {
86 for (
int row = range.topRow(); row <= range.bottomRow(); ++row) {
87 if (!rowsToRemove.contains(row)) {
88 rowsToRemove.append(row);
92 std::sort(rowsToRemove.begin(), rowsToRemove.end(),
94 for (
int row : rowsToRemove) {
95 m_table->removeRow(row);
101 QList<QPair<double, QString>> labels;
102 for (
int row = 0; row < m_table->rowCount(); ++row) {
103 QTableWidgetItem* valueItem = m_table->item(row, 0);
104 QTableWidgetItem* labelItem = m_table->item(row, 1);
106 if (valueItem && labelItem) {
108 double value = valueItem->text().toDouble(&ok);
110 labels.append(qMakePair(value, labelItem->text()));
118 const QList<QPair<double, QString>>& labels) {
119 m_table->setRowCount(0);
120 for (
const QPair<double, QString>& label : labels) {
121 int row = m_table->rowCount();
122 m_table->insertRow(row);
124 QTableWidgetItem* valueItem =
125 new QTableWidgetItem(QString::number(label.first));
126 m_table->setItem(row, 0, valueItem);
128 QTableWidgetItem* labelItem =
new QTableWidgetItem(label.second);
129 m_table->setItem(row, 1, labelItem);