完成 Property Editor 样例‘

This commit is contained in:
Jesse Qu 2026-01-05 17:29:59 +08:00
parent 2891037da6
commit f7b86e118f
5 changed files with 40 additions and 8 deletions

18
include/CommonInclude.h Normal file
View File

@ -0,0 +1,18 @@
#ifndef CommonInclude_h__
#define CommonInclude_h__
#include <QObject>
#include <QSharedPointer>
#include <QDebug>
#include <QMetaType>
#define Q_PROPERTY_VAR(Type,Name)\
Q_PROPERTY(Type Name READ get##Name WRITE set##Name) \
Type get##Name(){ return Name; } \
void set##Name(Type var){ \
Name = var; \
qDebug() << "Set" << static_cast<QObject*>(this) <<#Name <<": " <<var; \
} \
Type Name
#endif // CommonInclude_h__

View File

@ -2,6 +2,7 @@
#define DESIGNER_SCENE_H #define DESIGNER_SCENE_H
#include <QGraphicsScene> #include <QGraphicsScene>
#include "graphicsItem/graphicsBaseItem.h"
class GraphicsItemGroup; class GraphicsItemGroup;
@ -22,7 +23,7 @@ public:
void destroyGroup(); void destroyGroup();
signals: signals:
void signalAddItem(QGraphicsItem*); void signalAddItem(GraphicsBaseItem*);
protected: protected:
void drawBackground(QPainter*, const QRectF&) override; void drawBackground(QPainter*, const QRectF&) override;

View File

@ -1,10 +1,14 @@
#ifndef GRAPHICSBUSSECTIONITEM_H #ifndef GRAPHICSBUSSECTIONITEM_H
#define GRAPHICSBUSSECTIONITEM_H #define GRAPHICSBUSSECTIONITEM_H
#include "CommonInclude.h"
#include "graphicsItem/graphicsBaseItem.h" #include "graphicsItem/graphicsBaseItem.h"
class GraphicsBusSectionItem : public GraphicsBaseItem class GraphicsBusSectionItem : public GraphicsBaseItem
{ {
Q_OBJECT
public: public:
explicit GraphicsBusSectionItem(const QRect &rect, QGraphicsItem *parent = nullptr); explicit GraphicsBusSectionItem(const QRect &rect, QGraphicsItem *parent = nullptr);
virtual ~GraphicsBusSectionItem(); virtual ~GraphicsBusSectionItem();
@ -14,6 +18,9 @@ public:
void move(const QPointF&) override; void move(const QPointF&) override;
void editShape(int, const QPointF&) override; void editShape(int, const QPointF&) override;
public:
Q_PROPERTY_VAR(int, Int) = 0;
protected: protected:
virtual QPainterPath shape() override; virtual QPainterPath shape() override;
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override; virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;

View File

@ -9,6 +9,9 @@
#include "DockAreaWidget.h" #include "DockAreaWidget.h"
#include "DockWidget.h" #include "DockWidget.h"
#include "QDetailsView.h"
#include "graphicsItem/graphicsBaseItem.h"
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
namespace Ui { class CMainWindow; } namespace Ui { class CMainWindow; }
QT_END_NAMESPACE QT_END_NAMESPACE
@ -41,7 +44,7 @@ private slots:
void onAction_zoomFit(); void onAction_zoomFit();
void onAction_createGroup(); void onAction_createGroup();
void onAction_destroyGroup(); void onAction_destroyGroup();
void onSignal_addItem(QGraphicsItem*); void onSignal_addItem(GraphicsBaseItem*);
void onSignal_deleteItem(); void onSignal_deleteItem();
private: private:
@ -59,5 +62,6 @@ private:
DrawingPanel* m_pDrawingPanel; DrawingPanel* m_pDrawingPanel;
GraphicElementsPanel* m_pGraphicElementsPanel; GraphicElementsPanel* m_pGraphicElementsPanel;
QDetailsView* m_pPropertiesEditorView;
}; };
#endif // MAINWINDOW_H #endif // MAINWINDOW_H

View File

@ -16,6 +16,9 @@
#include "FloatingDockContainer.h" #include "FloatingDockContainer.h"
#include "DockComponentsFactory.h" #include "DockComponentsFactory.h"
#include "QDetailsView.h"
#include "util/selectorManager.h"
#include "drawingPanel.h" #include "drawingPanel.h"
#include "designerScene.h" #include "designerScene.h"
#include "graphicElementsPanel.h" #include "graphicElementsPanel.h"
@ -67,7 +70,7 @@ void CMainWindow::initializeDockUi()
// Set central widget // Set central widget
m_pDrawingPanel = new DrawingPanel(); m_pDrawingPanel = new DrawingPanel();
DesignerScene* designerScene = m_pDrawingPanel->getDesignerScene(); DesignerScene* designerScene = m_pDrawingPanel->getDesignerScene();
connect(designerScene, SIGNAL(signalAddItem(QGraphicsItem*)), this, SLOT(onSignal_addItem(QGraphicsItem*))); connect(designerScene, SIGNAL(signalAddItem(GraphicsBaseItem*)), this, SLOT(onSignal_addItem(GraphicsBaseItem*)));
CDockWidget* centralDockWidget = new CDockWidget("CentralWidget"); CDockWidget* centralDockWidget = new CDockWidget("CentralWidget");
centralDockWidget->setWidget(m_pDrawingPanel); centralDockWidget->setWidget(m_pDrawingPanel);
auto* centralDockArea = m_pDockManager->setCentralWidget(centralDockWidget); auto* centralDockArea = m_pDockManager->setCentralWidget(centralDockWidget);
@ -83,11 +86,9 @@ void CMainWindow::initializeDockUi()
m_pDockManager->addDockWidget(DockWidgetArea::LeftDockWidgetArea, grapicElementsDockWidget); m_pDockManager->addDockWidget(DockWidgetArea::LeftDockWidgetArea, grapicElementsDockWidget);
ui->menuView->addAction(grapicElementsDockWidget->toggleViewAction()); ui->menuView->addAction(grapicElementsDockWidget->toggleViewAction());
QTableWidget* propertiesTable = new QTableWidget(); m_pPropertiesEditorView = new QDetailsView();
propertiesTable->setColumnCount(3);
propertiesTable->setRowCount(10);
CDockWidget* propertiesDockWidget = new CDockWidget(QString::fromWCharArray(L"属性编辑器")); CDockWidget* propertiesDockWidget = new CDockWidget(QString::fromWCharArray(L"属性编辑器"));
propertiesDockWidget->setWidget(propertiesTable); propertiesDockWidget->setWidget(m_pPropertiesEditorView);
propertiesDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget); propertiesDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
propertiesDockWidget->resize(250, 150); propertiesDockWidget->resize(250, 150);
propertiesDockWidget->setMinimumSize(200,150); propertiesDockWidget->setMinimumSize(200,150);
@ -165,10 +166,11 @@ void CMainWindow::onAction_destroyGroup()
} }
} }
void CMainWindow::onSignal_addItem(QGraphicsItem* item) void CMainWindow::onSignal_addItem(GraphicsBaseItem* item)
{ {
if(item) if(item)
{ {
m_pPropertiesEditorView->setObject(static_cast<QObject*>(item));
QUndoCommand* addItemCommand = new AddItemCommand(item, item->scene()); QUndoCommand* addItemCommand = new AddItemCommand(item, item->scene());
m_pUndoStack->push(addItemCommand); m_pUndoStack->push(addItemCommand);
} }