From 8ca036fafbf5d9b253d21ce6202a6e7ec52f84a4 Mon Sep 17 00:00:00 2001 From: karlis <2995621482@qq.com> Date: Tue, 7 Mar 2023 17:06:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E7=B3=BB=E5=88=97=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ArchitectureColoredPainting.vcxproj | 9 +- ...rchitectureColoredPainting.vcxproj.filters | 15 +- ArchitectureColoredPainting/EditorWidget.ui | 210 ++++++++++-------- .../EditorWidgetItem.ui | 113 ++++++++++ ArchitectureColoredPainting/MainWindow.ui | 6 +- .../src/Editor/EditorWidget.cpp | 86 +++---- .../src/Editor/EditorWidget.h | 49 ++-- .../src/Editor/EditorWidgetItem.cpp | 63 ++++++ .../src/Editor/EditorWidgetItem.h | 39 ++++ .../src/Editor/LayerWrapper.cpp | 1 - 10 files changed, 403 insertions(+), 188 deletions(-) create mode 100644 ArchitectureColoredPainting/EditorWidgetItem.ui create mode 100644 ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp create mode 100644 ArchitectureColoredPainting/src/Editor/EditorWidgetItem.h diff --git a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj index f933123..c9aebe4 100644 --- a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj +++ b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj @@ -104,8 +104,9 @@ - + + @@ -149,11 +150,12 @@ - + + @@ -187,6 +189,7 @@ + @@ -216,7 +219,7 @@ - + diff --git a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters index b433451..6052abb 100644 --- a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters +++ b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters @@ -76,9 +76,12 @@ Form Files + + Form Files + - + Source Files\Editor @@ -213,12 +216,15 @@ Source Files\Editor + + Source Files + Header Files\Renderer - + Header Files\Editor @@ -248,6 +254,9 @@ Header Files + + Header Files + @@ -328,7 +337,7 @@ - + Form Files diff --git a/ArchitectureColoredPainting/EditorWidget.ui b/ArchitectureColoredPainting/EditorWidget.ui index 1243056..5825ce6 100644 --- a/ArchitectureColoredPainting/EditorWidget.ui +++ b/ArchitectureColoredPainting/EditorWidget.ui @@ -1,110 +1,146 @@ - EditorWidgetClass - + EditorWidget + 0 0 - 1124 - 695 + 1139 + 685 - RendererWidget + Form - - - 0 - - - 0 - - - 0 - - - 0 - + - - - - - - - - - Qt::AlignCenter - - - - - + + + + - - - - - - - - - - - - 0 - - - - Layer - - - - - Element - - - - - - - - Qt::CustomContextMenu - - - - 1 - - - - - - + + + + + + 80 + 0 + + + + + 80 + 16777215 + + + + 新建 + + + + + + + + 80 + 0 + + + + + 80 + 16777215 + + + + 保存 + + + + + + + + 80 + 0 + + + + + 80 + 16777215 + + + + 另存为 + + + + + + + + 80 + 0 + + + + + 80 + 16777215 + + + + 关闭 + + + + - - - + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 1 + + + + Tab 1 + + + + + Tab 2 + + + + + - - PreviewWindow - QOpenGLWidget -
PreviewWindow.h
-
- - LayerTreeWidget - QTreeWidget -
LayerTreeWidget.h
-
- - InfoDisplayWidget + EditorWidgetItem QWidget -
InfoDisplayWidget.h
+
EditorWidgetItem.h
1
diff --git a/ArchitectureColoredPainting/EditorWidgetItem.ui b/ArchitectureColoredPainting/EditorWidgetItem.ui new file mode 100644 index 0000000..e69dc93 --- /dev/null +++ b/ArchitectureColoredPainting/EditorWidgetItem.ui @@ -0,0 +1,113 @@ + + + EditorWidgetItem + + + + 0 + 0 + 1124 + 695 + + + + RendererWidget + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + Qt::AlignCenter + + + + + + + + + + + + + + + + + + 0 + + + + Layer + + + + + Element + + + + + + + + Qt::CustomContextMenu + + + + 1 + + + + + + + + + + + + + + + + + + PreviewWindow + QOpenGLWidget +
PreviewWindow.h
+
+ + LayerTreeWidget + QTreeWidget +
LayerTreeWidget.h
+
+ + InfoDisplayWidget + QWidget +
InfoDisplayWidget.h
+ 1 +
+
+ + +
diff --git a/ArchitectureColoredPainting/MainWindow.ui b/ArchitectureColoredPainting/MainWindow.ui index 647adb8..0608ef8 100644 --- a/ArchitectureColoredPainting/MainWindow.ui +++ b/ArchitectureColoredPainting/MainWindow.ui @@ -60,16 +60,16 @@ - QTabBar::tab { + QTabBar::tab.rendererWidget { height: 0px; margin-top:0px; } - QTabWidget::tab-bar + QTabWidget::tab-bar.rendererWidget { height: 0px; top:0px; } - QTabWidget::pane { + QTabWidget::pane.rendererWidget { border: 0px; background-color: transparent; } diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp b/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp index 03ca81d..91926d6 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp +++ b/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp @@ -1,63 +1,33 @@ #include "EditorWidget.h" +#include "EditorWidgetItem.h" +#include +#include +#include -EditorWidget::EditorWidget(QWidget *parent) : QWidget(parent) +EditorWidget::EditorWidget(QWidget* parent) : QWidget(parent) { - QImage x; - displayLayer = nullptr; - displayElement = nullptr; - ui.setupUi(this); - previewWindow = ui.Preview; - treeWidget = ui.LayerTree; - tabWidget = ui.DisplayTab; - layerInfoDisplayWidget = dynamic_cast(tabWidget->widget(0)); - elementInfoDisplayWidget = dynamic_cast(tabWidget->widget(1)); - connect(treeWidget, &LayerTreeWidget::displayLayerChange, this, &EditorWidget::onLayerChange); - connect(layerInfoDisplayWidget, &InfoDisplayWidget::requireRefreshPreview, this, - &EditorWidget::triggerRefreshPreview); - connect(treeWidget, &LayerTreeWidget::requireRefreshPreview, this, - &EditorWidget::triggerRefreshPreview); - connect(layerInfoDisplayWidget, &InfoDisplayWidget::requireSelfRefresh, layerInfoDisplayWidget, &InfoDisplayWidget::triggerSelfRefresh); - // &EditorWidget::triggerRefreshPreview); - // test - QFile settingFile; - settingFile.setFileName("../data.json"); - settingFile.open(QFile::ReadOnly); - QByteArray setting = settingFile.readAll().trimmed(); - QJsonParseError jError; - QJsonDocument jsonDoc(QJsonDocument::fromJson(setting, &jError)); - qDebug() << jsonDoc.object().value("height").toDouble(); - qDebug() << jError.errorString(); - // end test - QJsonObject source = jsonDoc.object(); - elementManager = new ElementManager(source,previewWindow->getRenderer()); - layerManager = new LayerManager(source, elementManager); - qDebug() << layerManager->toJson(); - previewWindow->initialize(layerManager,QSize(jsonDoc.object().value("width").toDouble(),jsonDoc.object().value("height").toDouble())); - if (layerManager->getRoot() != nullptr) - { - treeWidget->root = layerManager->getRoot(); - treeWidget->refresh(); - treeWidget->addTopLevelItem(treeWidget->root->getQTreeItem()); - } + ui.setupUi(this); + this->createButton = ui.createButton; + this->closeButton = ui.closeButton; + this->saveButton = ui.saveButton; + this->saveAsButton = ui.saveAsButton; + this->tabWidget = ui.tabWidget; + while (this->tabWidget->count() > 0) + { + this->tabWidget->removeTab(0); + } + connect(this->createButton, &QPushButton::clicked, this, [this]() { + static int count = 0; + this->tabWidget->addTab(new EditorWidgetItem(this),"untitled"+QString::number(count++)); + }); + connect(this->closeButton, &QPushButton::clicked, this, [this]() { + this->tabWidget->removeTab(this->tabWidget->currentIndex()); + }); + connect(this->saveButton, &QPushButton::clicked, this, [this]() { + + }); + connect(this->saveAsButton, &QPushButton::clicked, this, [this]() { + + }); } -EditorWidget::~EditorWidget() -{ -} - -void EditorWidget::paintEvent(QPaintEvent *event) -{ -} - -void EditorWidget::onLayerChange(LayerWrapper *layer) -{ - displayLayer = layer; - // TODO : notify InfoDisplayWidget and update - dynamic_cast(tabWidget->widget(0))->setLayer(layer); - this->update(); -} - -void EditorWidget::triggerRefreshPreview() -{ - previewWindow->update(); -} diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidget.h b/ArchitectureColoredPainting/src/Editor/EditorWidget.h index 6c56ded..6024513 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidget.h +++ b/ArchitectureColoredPainting/src/Editor/EditorWidget.h @@ -1,39 +1,22 @@ #pragma once - -#include "ElementManager.h" -#include "InfoDisplayWidget.h" -#include "LayerManager.h" -#include "LayerTreeWidget.h" -#include "PreviewWindow.h" +#include #include "ui_EditorWidget.h" -#include -#include -#include -class EditorWidget : public QWidget +class EditorWidget : + public QWidget { Q_OBJECT - - private: - // DATA PART - PreviewWindow *previewWindow; - ElementManager *elementManager; - LayerManager *layerManager; - // QT GUI PART - Ui::EditorWidgetClass ui; - LayerTreeWidget *treeWidget; - QTabWidget *tabWidget; - InfoDisplayWidget *layerInfoDisplayWidget, *elementInfoDisplayWidget; - // QT DATA PART - LayerWrapper *displayLayer; - GraphicElement *displayElement; - - public: - EditorWidget(QWidget *parent = nullptr); - ~EditorWidget(); - void paintEvent(QPaintEvent *event) override; - - private slots: - void onLayerChange(LayerWrapper *layer); - void triggerRefreshPreview(); +private: + Ui::EditorWidget ui; + QTabWidget* tabWidget; + QPushButton* createButton; + QPushButton* closeButton; + QPushButton* saveButton; + QPushButton* saveAsButton; + +public: + EditorWidget(QWidget* parent = nullptr); + ~EditorWidget()=default; + }; + diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp new file mode 100644 index 0000000..abb1410 --- /dev/null +++ b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp @@ -0,0 +1,63 @@ +#include "EditorWidgetItem.h" + +EditorWidgetItem::EditorWidgetItem(QWidget *parent) : QWidget(parent) +{ + QImage x; + displayLayer = nullptr; + displayElement = nullptr; + ui.setupUi(this); + previewWindow = ui.Preview; + treeWidget = ui.LayerTree; + tabWidget = ui.DisplayTab; + layerInfoDisplayWidget = dynamic_cast(tabWidget->widget(0)); + elementInfoDisplayWidget = dynamic_cast(tabWidget->widget(1)); + connect(treeWidget, &LayerTreeWidget::displayLayerChange, this, &EditorWidgetItem::onLayerChange); + connect(layerInfoDisplayWidget, &InfoDisplayWidget::requireRefreshPreview, this, + &EditorWidgetItem::triggerRefreshPreview); + connect(treeWidget, &LayerTreeWidget::requireRefreshPreview, this, + &EditorWidgetItem::triggerRefreshPreview); + connect(layerInfoDisplayWidget, &InfoDisplayWidget::requireSelfRefresh, layerInfoDisplayWidget, &InfoDisplayWidget::triggerSelfRefresh); + // &EditorWidget::triggerRefreshPreview); + // test + QFile settingFile; + settingFile.setFileName("../data.json"); + settingFile.open(QFile::ReadOnly); + QByteArray setting = settingFile.readAll().trimmed(); + QJsonParseError jError; + QJsonDocument jsonDoc(QJsonDocument::fromJson(setting, &jError)); + qDebug() << jsonDoc.object().value("height").toDouble(); + qDebug() << jError.errorString(); + // end test + QJsonObject source = jsonDoc.object(); + elementManager = new ElementManager(source,previewWindow->getRenderer()); + layerManager = new LayerManager(source, elementManager); + qDebug() << layerManager->toJson(); + previewWindow->initialize(layerManager,QSize(jsonDoc.object().value("width").toDouble(),jsonDoc.object().value("height").toDouble())); + if (layerManager->getRoot() != nullptr) + { + treeWidget->root = layerManager->getRoot(); + treeWidget->refresh(); + treeWidget->addTopLevelItem(treeWidget->root->getQTreeItem()); + } +} + +EditorWidgetItem::~EditorWidgetItem() +{ +} + +void EditorWidgetItem::paintEvent(QPaintEvent *event) +{ +} + +void EditorWidgetItem::onLayerChange(LayerWrapper *layer) +{ + displayLayer = layer; + // TODO : notify InfoDisplayWidget and update + dynamic_cast(tabWidget->widget(0))->setLayer(layer); + this->update(); +} + +void EditorWidgetItem::triggerRefreshPreview() +{ + previewWindow->update(); +} diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.h b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.h new file mode 100644 index 0000000..794743b --- /dev/null +++ b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.h @@ -0,0 +1,39 @@ +#pragma once + +#include "ElementManager.h" +#include "InfoDisplayWidget.h" +#include "LayerManager.h" +#include "LayerTreeWidget.h" +#include "PreviewWindow.h" +#include "ui_EditorWidgetItem.h" +#include +#include +#include + +class EditorWidgetItem : public QWidget +{ + Q_OBJECT + + private: + // DATA PART + PreviewWindow *previewWindow; + ElementManager *elementManager; + LayerManager *layerManager; + // QT GUI PART + Ui::EditorWidgetItem ui; + LayerTreeWidget *treeWidget; + QTabWidget *tabWidget; + InfoDisplayWidget *layerInfoDisplayWidget, *elementInfoDisplayWidget; + // QT DATA PART + LayerWrapper *displayLayer; + GraphicElement *displayElement; + + public: + EditorWidgetItem(QWidget *parent = nullptr); + ~EditorWidgetItem(); + void paintEvent(QPaintEvent *event) override; + + private slots: + void onLayerChange(LayerWrapper *layer); + void triggerRefreshPreview(); +}; diff --git a/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp b/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp index 28ba954..be40eaa 100644 --- a/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp +++ b/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp @@ -96,7 +96,6 @@ void FolderLayerWrapper::refresh() { cache.clear(); for (auto& child : children) { - qDebug() << child.get(); cache.addPath(child.get()->getCache()); } LayerWrapper::refresh();