diff --git a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj index 6b49ff0..ac1871e 100644 --- a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj +++ b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj @@ -104,6 +104,7 @@ + @@ -154,6 +155,7 @@ + @@ -197,6 +199,7 @@ + diff --git a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters index d32b61b..f60bea2 100644 --- a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters +++ b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters @@ -82,6 +82,9 @@ Form Files + + Form Files + @@ -234,6 +237,9 @@ Source Files\Editor + + Source Files + @@ -281,6 +287,9 @@ Header Files\Editor + + Header Files + diff --git a/ArchitectureColoredPainting/EditorSetting.ui b/ArchitectureColoredPainting/EditorSetting.ui new file mode 100644 index 0000000..3680069 --- /dev/null +++ b/ArchitectureColoredPainting/EditorSetting.ui @@ -0,0 +1,32 @@ + + + EditorSettingWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + + + + 设置背景颜色 + + + + + + + + + + diff --git a/ArchitectureColoredPainting/EditorSettingWidget.ui b/ArchitectureColoredPainting/EditorSettingWidget.ui new file mode 100644 index 0000000..fc73390 --- /dev/null +++ b/ArchitectureColoredPainting/EditorSettingWidget.ui @@ -0,0 +1,63 @@ + + + EditorSettingWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + + + + + 0 + 0 + + + + + 120 + 16777215 + + + + 设置背景颜色 + + + + + + + + 0 + 0 + + + + + 120 + 16777215 + + + + 设置项目名称 + + + + + + + + + + diff --git a/ArchitectureColoredPainting/EditorWidgetItem.ui b/ArchitectureColoredPainting/EditorWidgetItem.ui index 73f9357..63fbd7d 100644 --- a/ArchitectureColoredPainting/EditorWidgetItem.ui +++ b/ArchitectureColoredPainting/EditorWidgetItem.ui @@ -147,7 +147,7 @@ - 1 + 2 @@ -159,6 +159,11 @@ 图元池 + + + 设置 + + @@ -229,6 +234,12 @@
ElementPoolWidget.h
1 + + EditorSettingWidget + QWidget +
EditorSettingWidget.h
+ 1 +
diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp b/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp index b51987b..97898fb 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp +++ b/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp @@ -47,3 +47,11 @@ EditorWidget::EditorWidget(QWidget* parent) : QWidget(parent) }); } +void EditorWidget::renameTab(QWidget* target, QString name) +{ + int index = this->tabWidget->indexOf(target); + if (index != -1) + { + this->tabWidget->setTabText(index, name); + } +} \ No newline at end of file diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidget.h b/ArchitectureColoredPainting/src/Editor/EditorWidget.h index b0cfe2f..0986609 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidget.h +++ b/ArchitectureColoredPainting/src/Editor/EditorWidget.h @@ -18,6 +18,6 @@ private: public: EditorWidget(QWidget* parent = nullptr); ~EditorWidget()=default; - + void renameTab(QWidget* target, QString name); }; diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp index 41d175f..8f6afc9 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp +++ b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp @@ -1,8 +1,11 @@ #include "EditorWidgetItem.h" +#include "EditorWidget.h" +#include EditorWidgetItem::EditorWidgetItem(QString filePath,QWidget *parent) : QWidget(parent) { QImage x; + this->parent = parent; displayLayer = nullptr; displayElement = nullptr; ui.setupUi(this); @@ -12,9 +15,12 @@ EditorWidgetItem::EditorWidgetItem(QString filePath,QWidget *parent) : QWidget(p this->filePath = filePath; layerInfoDisplayWidget = dynamic_cast(tabWidget->widget(0)); elementInfoDisplayWidget = dynamic_cast(tabWidget->widget(1)); + editorSettingWidget = dynamic_cast(tabWidget->widget(2)); elementInfoDisplayWidget->enableEdit(); qDebug() << layerInfoDisplayWidget; qDebug() << elementInfoDisplayWidget; + connect(editorSettingWidget, &EditorSettingWidget::backgroundColorChanged, this, &EditorWidgetItem::handleBackgroundColorChange); + connect(editorSettingWidget, &EditorSettingWidget::projectNameChanged, this, &EditorWidgetItem::handleProjectNameChange); connect(previewWindow, &PreviewWindow::refreshElementPreviewByIndex, elementInfoDisplayWidget, &ElementPoolWidget::refreshPictureByIndex); connect(previewWindow, &PreviewWindow::layerInfoChanged, layerInfoDisplayWidget, &InfoDisplayWidget::triggerSelfRefresh); connect(treeWidget, &LayerTreeWidget::displayLayerChange, previewWindow, &PreviewWindow::currentLayerChanged); @@ -53,6 +59,15 @@ EditorWidgetItem::EditorWidgetItem(QString filePath,QWidget *parent) : QWidget(p treeWidget->refresh(); treeWidget->addTopLevelItem(treeWidget->root->getQTreeItem()); } + this->backgroundColor = source.value("background-color").toVariant().value(); + this->projectName = source.value("project-name").toString(); + qDebug() << this->backgroundColor; + qDebug() << this->projectName; + QTimer::singleShot(300, this, [this]() { + handleBackgroundColorChange(this->backgroundColor); + handleProjectNameChange(this->projectName); + }); + } EditorWidgetItem::~EditorWidgetItem() @@ -100,9 +115,28 @@ void EditorWidgetItem::saveImpl(QString filePath) const json.insert("height", 1080); json.insert("root-layer", source1.value("root-layer")); json.insert("elements", source2.value("elements")); + json.insert("project-name", this->projectName); + json.insert("background-color", QJsonValue::fromVariant(QVariant::fromValue(this->backgroundColor))); QJsonDocument doc(json); QFile file(filePath); file.open(QIODevice::WriteOnly); file.write(doc.toJson()); file.close(); +} + +void EditorWidgetItem::handleBackgroundColorChange(QColor color) +{ + this->backgroundColor = color; + previewWindow->setBackgroundColor(color); +} + +void EditorWidgetItem::handleProjectNameChange(QString name) +{ + this->projectName = name; + auto parent = dynamic_cast(this->parent); + qDebug() << name << " " << parent<<" "<renameTab(this, name); + } } \ No newline at end of file diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.h b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.h index 9fc5be8..409374a 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.h +++ b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.h @@ -6,6 +6,7 @@ #include "LayerManager.h" #include "LayerTreeWidget.h" #include "PreviewWindow.h" +#include "EditorSettingWidget.h" #include "ui_EditorWidgetItem.h" #include #include @@ -26,11 +27,17 @@ class EditorWidgetItem : public QWidget QTabWidget *tabWidget; InfoDisplayWidget* layerInfoDisplayWidget; ElementPoolWidget* elementInfoDisplayWidget; + EditorSettingWidget* editorSettingWidget; // QT DATA PART LayerWrapper *displayLayer; GraphicElement *displayElement; - QString filePath; + QWidget* parent; void saveImpl(QString filePath)const; +public: + // PROJECT INFO + QString filePath; + QString projectName; + QColor backgroundColor; public: EditorWidgetItem(QString filePath, QWidget *parent = nullptr); @@ -38,6 +45,8 @@ class EditorWidgetItem : public QWidget void paintEvent(QPaintEvent *event) override; void save() const; void saveAs(QString filePath)const; + void handleBackgroundColorChange(QColor color); + void handleProjectNameChange(QString name); private slots: void onLayerChange(LayerWrapper *layer); diff --git a/ArchitectureColoredPainting/src/Editor/PreviewWindow.cpp b/ArchitectureColoredPainting/src/Editor/PreviewWindow.cpp index 05b05e5..c4a03b5 100644 --- a/ArchitectureColoredPainting/src/Editor/PreviewWindow.cpp +++ b/ArchitectureColoredPainting/src/Editor/PreviewWindow.cpp @@ -13,6 +13,7 @@ PreviewWindow::PreviewWindow(QWidget *parent) : QOpenGLWidget(parent) painter->setRenderHint(QPainter::HighQualityAntialiasing); layerManager = nullptr; currentLayer = nullptr; + backgroundColor = QColor(255, 255, 255, 255); } void PreviewWindow::initialize(LayerManager *layerManager,QSize windowSize) @@ -44,7 +45,7 @@ void PreviewWindow::initializeGL() void PreviewWindow::paintGL() { - glClearColor(1.0, 1.0, 1.0, 1.0); + glClearColor(backgroundColor.redF(), backgroundColor.greenF(), backgroundColor.blueF(), backgroundColor.alphaF()); glClear(GL_COLOR_BUFFER_BIT); painter->begin(this); painter->setRenderHint(QPainter::Antialiasing); @@ -112,4 +113,10 @@ void PreviewWindow::mouseMoveEvent(QMouseEvent* event) void PreviewWindow::mouseReleaseEvent(QMouseEvent* event) { emit layerInfoChanged(); +} + +void PreviewWindow::setBackgroundColor(QColor color) +{ + this->backgroundColor = color; + this->repaint(); } \ No newline at end of file diff --git a/ArchitectureColoredPainting/src/Editor/PreviewWindow.h b/ArchitectureColoredPainting/src/Editor/PreviewWindow.h index 70a033b..9f9d07c 100644 --- a/ArchitectureColoredPainting/src/Editor/PreviewWindow.h +++ b/ArchitectureColoredPainting/src/Editor/PreviewWindow.h @@ -23,6 +23,7 @@ class PreviewWindow : public QOpenGLWidget, protected QOpenGLFunctions QRectF viewportRect; LayerWrapper* currentLayer; QPointF m_lastPos; + QColor backgroundColor; void mousePressEvent(QMouseEvent* event) override; void mouseMoveEvent(QMouseEvent* event) override; void mouseReleaseEvent(QMouseEvent* event) override; @@ -35,6 +36,7 @@ class PreviewWindow : public QOpenGLWidget, protected QOpenGLFunctions void paintGL() override; void resizeGL(int w, int h) override; Renderer::ElementRenderer* const getRenderer()const; + void setBackgroundColor(QColor color); public slots: void currentLayerChanged(LayerWrapper*); diff --git a/ArchitectureColoredPainting/src/Editor/RightBar/EditorSettingWidget.cpp b/ArchitectureColoredPainting/src/Editor/RightBar/EditorSettingWidget.cpp new file mode 100644 index 0000000..2f54a22 --- /dev/null +++ b/ArchitectureColoredPainting/src/Editor/RightBar/EditorSettingWidget.cpp @@ -0,0 +1,21 @@ +#include "EditorSettingWidget.h" +#include +#include +#include + +EditorSettingWidget::EditorSettingWidget(QWidget* parent) + : QWidget(parent) +{ + ui.setupUi(this); + connect(ui.backgroundColorButton, &QPushButton::clicked, this, [this]() { + QColor color = QColorDialog::getColor(Qt::white, this, QString::fromLocal8Bit("ѡ񱳾ɫ")); + if (color.isValid()) + { + emit backgroundColorChanged(color); + } + }); + connect(ui.renameButton, &QPushButton::clicked, this, [this]() { + QString name = QInputDialog::getText(this, QString::fromLocal8Bit(""), QString::fromLocal8Bit("µĿ")); + emit projectNameChanged(name); + }); +} \ No newline at end of file diff --git a/ArchitectureColoredPainting/src/Editor/RightBar/EditorSettingWidget.h b/ArchitectureColoredPainting/src/Editor/RightBar/EditorSettingWidget.h new file mode 100644 index 0000000..ba0166c --- /dev/null +++ b/ArchitectureColoredPainting/src/Editor/RightBar/EditorSettingWidget.h @@ -0,0 +1,21 @@ +#pragma once +#include +#include "ui_EditorSettingWidget.h" + +class EditorSettingWidget : + public QWidget +{ + Q_OBJECT; + + private: + Ui::EditorSettingWidget ui; + + public: + EditorSettingWidget(QWidget* parent = nullptr); + + signals: + void backgroundColorChanged(QColor); + void projectNameChanged(QString); + +}; + diff --git a/data.json b/data.json index 4f381cb..93398a4 100644 --- a/data.json +++ b/data.json @@ -1,4 +1,6 @@ { + "project-name": "样例1", + "background-color": "#ffffff", "height": 1080, "width": 1080, "elements": [