完成 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
#include <QGraphicsScene>
#include "graphicsItem/graphicsBaseItem.h"
class GraphicsItemGroup;
@ -22,7 +23,7 @@ public:
void destroyGroup();
signals:
void signalAddItem(QGraphicsItem*);
void signalAddItem(GraphicsBaseItem*);
protected:
void drawBackground(QPainter*, const QRectF&) override;

View File

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

View File

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

View File

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