From 27c1d4d18a8ea475f36b60f544bee8d2894a7e53 Mon Sep 17 00:00:00 2001 From: ArgonarioD Date: Wed, 15 Mar 2023 13:44:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86StrokeStyleWidget=E7=9A=84=E8=A1=A8?= =?UTF-8?q?=E6=A0=BC=E6=94=B9=E4=B8=BA=E4=BA=86=E5=85=B6=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ArchitectureColoredPainting.vcxproj | 4 +- ...rchitectureColoredPainting.vcxproj.filters | 4 +- ...tyleListView.cpp => StrokeStyleWidget.cpp} | 72 +++++++++++-------- ...okeStyleListView.h => StrokeStyleWidget.h} | 12 ++-- .../src/Editor/LayerStyle.cpp | 6 +- 5 files changed, 56 insertions(+), 42 deletions(-) rename ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/{StrokeStyleListView.cpp => StrokeStyleWidget.cpp} (50%) rename ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/{StrokeStyleListView.h => StrokeStyleWidget.h} (55%) diff --git a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj index a0e5563..4f5655d 100644 --- a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj +++ b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj @@ -153,7 +153,7 @@ - + @@ -189,7 +189,7 @@ - + diff --git a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters index e019bc3..90248ca 100644 --- a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters +++ b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters @@ -216,7 +216,7 @@ Source Files\Editor\Style - + Source Files\Editor\Style @@ -254,7 +254,7 @@ Header Files - + Header Files\Editor\Style diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleListView.cpp b/ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleWidget.cpp similarity index 50% rename from ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleListView.cpp rename to ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleWidget.cpp index 5b011a7..48a4a6a 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleListView.cpp +++ b/ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleWidget.cpp @@ -1,4 +1,4 @@ -#include "StrokeStyleListView.h" +#include "StrokeStyleWidget.h" #include "ColorPicker.h" #include @@ -8,63 +8,73 @@ constexpr int COLUMN_METALLIC = 2; constexpr int COLUMN_ROUGHNESS = 3; constexpr int COLUMN_OPERATIONS = 4; -// TODO: 将这个类改为继承QWidget,把table转为其中的一个元素,加上新增行按钮和宽度设置 -StrokeStyleListView::StrokeStyleListView( +// TODO: 加上新增行按钮和宽度设置 +StrokeStyleWidget::StrokeStyleWidget( std::shared_ptr stroke, QWidget* parent -) : QTableWidget(parent), stroke(stroke) +) : QWidget(parent), stroke(stroke) { - this->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContentsOnFirstShow); - this->setColumnCount(5); - this->setRowCount(stroke->materialMap.size()); + this->viewLayout = new QVBoxLayout(this); + this->setLayout(viewLayout); + + initTable(stroke); + viewLayout->addWidget(strokeTable); + this->adjustSize(); +} + +void StrokeStyleWidget::initTable(std::shared_ptr& stroke) +{ + this->strokeTable = new QTableWidget(this); + strokeTable->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContentsOnFirstShow); + strokeTable->setColumnCount(5); + strokeTable->setRowCount(stroke->materialMap.size()); QStringList headers; - headers.append(QStringLiteral("离心距离占比")); - headers.append(QStringLiteral("颜色")); - headers.append(QStringLiteral("金属度")); - headers.append(QStringLiteral("粗糙度")); - headers.append(QStringLiteral("其他操作")); - this->setHorizontalHeaderLabels(headers); - for (int row = 0; auto& strokePair : stroke->materialMap) + headers << QStringLiteral("离心距离占比") + << QStringLiteral("颜色") + << QStringLiteral("金属度") + << QStringLiteral("粗糙度") + << QStringLiteral("其他操作"); + strokeTable->setHorizontalHeaderLabels(headers); + for (int row = 0; auto & strokePair : stroke->materialMap) { QTableWidgetItem* widthItem = new QTableWidgetItem; widthItem->setData(Qt::EditRole, strokePair.first); - this->setItem(row, COLUMN_WIDTH, widthItem); + strokeTable->setItem(row, COLUMN_WIDTH, widthItem); QColor* colorPtr = &(strokePair.second.color); QTableWidgetItem* colorItem = new QTableWidgetItem; colorItem->setData(Qt::DisplayRole, *colorPtr); - this->setItem(row, COLUMN_COLOR, colorItem); - ColorPicker* colorPicker = new ColorPicker(*colorPtr, this); - this->setCellWidget(row, COLUMN_COLOR, colorPicker); + strokeTable->setItem(row, COLUMN_COLOR, colorItem); + ColorPicker* colorPicker = new ColorPicker(*colorPtr, strokeTable); + strokeTable->setCellWidget(row, COLUMN_COLOR, colorPicker); connect(colorPicker, &ColorPicker::colorChanged, [this, colorPtr](QColor color) { *colorPtr = color; - this->update(); + this->strokeTable->update(); }); QTableWidgetItem* metallicItem = new QTableWidgetItem; metallicItem->setData(Qt::EditRole, strokePair.second.metallic); - this->setItem(row, COLUMN_METALLIC, metallicItem); + strokeTable->setItem(row, COLUMN_METALLIC, metallicItem); QTableWidgetItem* roughnessItem = new QTableWidgetItem; roughnessItem->setData(Qt::EditRole, strokePair.second.roughness); - this->setItem(row, COLUMN_ROUGHNESS, roughnessItem); + strokeTable->setItem(row, COLUMN_ROUGHNESS, roughnessItem); QtMaterialRaisedButton* removeButton = new QtMaterialRaisedButton("-", this); removeButton->setFixedSize(20, 20); - this->setCellWidget(row, COLUMN_OPERATIONS, removeButton); + strokeTable->setCellWidget(row, COLUMN_OPERATIONS, removeButton); connect(removeButton, &QtMaterialRaisedButton::clicked, [this, row]() { - this->stroke->materialMap.erase(this->item(row, COLUMN_WIDTH)->text().toFloat()); - this->removeRow(row); + this->stroke->materialMap.erase(this->strokeTable->item(row, COLUMN_WIDTH)->text().toFloat()); + this->strokeTable->removeRow(row); }); row++; } - connect(this, &StrokeStyleListView::currentItemChanged, this, &StrokeStyleListView::onCurrentItemChanged); - connect(this, &StrokeStyleListView::cellChanged, this, &StrokeStyleListView::onCellChanged); - this->adjustSize(); + connect(strokeTable, &QTableWidget::currentItemChanged, this, &StrokeStyleWidget::onCurrentItemChanged); + connect(strokeTable, &QTableWidget::cellChanged, this, &StrokeStyleWidget::onCellChanged); } -void StrokeStyleListView::onCurrentItemChanged(QTableWidgetItem* current, QTableWidgetItem* previous) +void StrokeStyleWidget::onCurrentItemChanged(QTableWidgetItem* current, QTableWidgetItem* previous) { if (!current) return; int column = current->column(); @@ -74,16 +84,16 @@ void StrokeStyleListView::onCurrentItemChanged(QTableWidgetItem* current, QTable } } -void StrokeStyleListView::onCellChanged(int row, int column) +void StrokeStyleWidget::onCellChanged(int row, int column) { - auto changedItem = this->item(row, column); + auto changedItem = strokeTable->item(row, column); auto changedItemValue = changedItem->text().toFloat(); if (changedItemValue < 0 || 1 < changedItemValue) { changedItem->setData(Qt::EditRole, this->currentItemValue.toFloat()); return; } - auto changedWidth = this->item(row, COLUMN_WIDTH)->text().toFloat(); + auto changedWidth = strokeTable->item(row, COLUMN_WIDTH)->text().toFloat(); switch (row) { case COLUMN_WIDTH: diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleListView.h b/ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleWidget.h similarity index 55% rename from ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleListView.h rename to ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleWidget.h index f12e400..c2a9179 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleListView.h +++ b/ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleWidget.h @@ -1,17 +1,21 @@ #pragma once #include "LayerStyle.h" #include "../Renderer/Painting/MaterialStyleStroke.h" -#include -#include #include -class StrokeStyleListView : public QTableWidget +#include +class StrokeStyleWidget : public QWidget { Q_OBJECT private: QString currentItemValue; + QVBoxLayout* viewLayout; + QTableWidget* strokeTable; + + void initTable(std::shared_ptr& stroke); + public: - StrokeStyleListView(std::shared_ptr stroke, QWidget* parent = nullptr); + StrokeStyleWidget(std::shared_ptr stroke, QWidget* parent = nullptr); std::shared_ptr stroke; protected slots: diff --git a/ArchitectureColoredPainting/src/Editor/LayerStyle.cpp b/ArchitectureColoredPainting/src/Editor/LayerStyle.cpp index e44e855..bba4015 100644 --- a/ArchitectureColoredPainting/src/Editor/LayerStyle.cpp +++ b/ArchitectureColoredPainting/src/Editor/LayerStyle.cpp @@ -1,5 +1,5 @@ #include "LayerStyle.h" -#include "./EditorWidgetComponent/StrokeStyleListView.h" +#include "./EditorWidgetComponent/StrokeStyleWidget.h" #include #include #include @@ -79,7 +79,7 @@ QWidget* StrokeElementLayerStyle::getInputWidget() QVBoxLayout* layout = new QVBoxLayout(w); layout->setMargin(0); - StrokeStyleListView* leftStrokeView = new StrokeStyleListView( + StrokeStyleWidget* leftStrokeView = new StrokeStyleWidget( std::dynamic_pointer_cast(this->strokePair.first->materialStroke), w ); layout->addWidget(leftStrokeView); @@ -89,7 +89,7 @@ QWidget* StrokeElementLayerStyle::getInputWidget() checkEachSideIndependent->setChecked(enableEachSideIndependent); layout->addWidget(checkEachSideIndependent); - StrokeStyleListView* rightStrokeView = new StrokeStyleListView( + StrokeStyleWidget* rightStrokeView = new StrokeStyleWidget( std::dynamic_pointer_cast(this->strokePair.second->materialStroke), w ); layout->addWidget(rightStrokeView);