From 83c83518474c319ce0c8a910212616c4c72d0aa7 Mon Sep 17 00:00:00 2001 From: lipengpeng Date: Sat, 9 Aug 2025 12:55:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AF=94=E8=BE=83=E6=8C=87=E4=BB=A4=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E7=BB=91=E5=AE=9A=E4=B8=A4=E4=B8=AA=E5=AF=84=E5=AD=98?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coil.cpp | 3 --- comparator.cpp | 46 ++++++++++++++++++++++++++++++++++++++++----- comparator.h | 7 +++++++ item.cpp | 9 ++++++--- item.h | 4 ++-- registermanager.cpp | 2 +- 6 files changed, 57 insertions(+), 14 deletions(-) diff --git a/coil.cpp b/coil.cpp index a1f46bc..be28e26 100644 --- a/coil.cpp +++ b/coil.cpp @@ -32,9 +32,6 @@ void Coil::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWid painter->save(); painter->setFont(QFont("Arial", 8)); painter->setPen(Qt::black); - // 在元件底部居中绘制寄存器ID -// painter->drawText(boundingRect().adjusted(0, 20, 0, 0), -// Qt::AlignCenter, registerId_); QString text = QString("%1: %2").arg(registerId()).arg(registerValue_); painter->drawText(boundingRect(), Qt::AlignBottom | Qt::AlignHCenter, text); painter->restore(); diff --git a/comparator.cpp b/comparator.cpp index d12a36a..1cf320f 100644 --- a/comparator.cpp +++ b/comparator.cpp @@ -7,6 +7,11 @@ Comparator::Comparator(const QString &type) : Item(type) } +QRectF Comparator::boundingRect() const +{ + return QRectF(-22, -20, 44, 40); +} + void Comparator::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *) { painter->setRenderHint(QPainter::Antialiasing); @@ -21,15 +26,20 @@ void Comparator::paint(QPainter *painter, const QStyleOptionGraphicsItem *option painter->drawEllipse(QPointF(-18, 0), 4, 4); painter->drawEllipse(QPointF(18, 0), 4, 4); } - if (!registerId_.isEmpty()) { painter->save(); painter->setFont(QFont("Arial", 8)); painter->setPen(Qt::black); - // 在元件底部居中绘制寄存器ID - painter->drawText(boundingRect().adjusted(0, 20, 0, 0), - Qt::AlignCenter, registerId_); + if (!registerId_.isEmpty()) { + QString text = QString("%1: %2").arg(registerId_).arg(registerValue_); + painter->drawText(QRectF(-20, -25, 40, 20), Qt::AlignCenter, text); + } + + // 在右上角显示第二个寄存器 + if (!registerId2_.isEmpty()) { + QString text = QString("%1: %2").arg(registerId2_).arg(registerValue2_); + painter->drawText(QRectF(-20, 5, 40, 20), Qt::AlignCenter, text); + } painter->restore(); - } if (option->state & QStyle::State_Selected) { QPen pen(Qt::DashLine); pen.setColor(Qt::blue); @@ -39,3 +49,29 @@ void Comparator::paint(QPainter *painter, const QStyleOptionGraphicsItem *option painter->drawRect(boundingRect()); } } + +void Comparator::setRegisterId(const QString &id) +{ + if (registerId_.isEmpty()) + { + registerId_ = id; + } + else if(registerId2_.isEmpty()) + { + registerId2_ = id; + } +} + +void Comparator::setRegisterValue(const QString ®isterId, quint16 value) +{ + if (registerId_ == registerId) + { + registerValue_ = value; + update(); // 触发重绘 + } + if (registerId2_ == registerId) + { + registerValue2_ = value; + update(); // 触发重绘 + } +} diff --git a/comparator.h b/comparator.h index 61f75bd..a60f7c2 100644 --- a/comparator.h +++ b/comparator.h @@ -6,9 +6,16 @@ class Comparator : public Item { public: Comparator(const QString &type); + QRectF boundingRect() const override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *) override; + void setRegisterId(const QString &id) override; + void setRegisterValue(const QString ®isterId, quint16 value) override; + +private: + QString registerId2_; + quint16 registerValue2_ = 0; }; #endif // COMPARATOR_H diff --git a/item.cpp b/item.cpp index 6d46328..a8fc850 100644 --- a/item.cpp +++ b/item.cpp @@ -58,10 +58,13 @@ QString Item::itemType() return type_; } -void Item::setRegisterValue(quint16 value) +void Item::setRegisterValue(const QString ®isterId, quint16 value) { - registerValue_ = value; - update(); // 触发重绘 + if (registerId_ == registerId) + { + registerValue_ = value; + update(); // 触发重绘 + } } void Item::MenuActions(QMenu *menu) diff --git a/item.h b/item.h index b28b52e..a6a690f 100644 --- a/item.h +++ b/item.h @@ -21,9 +21,9 @@ public: void removeConnection(Connection* conn); QList connections(); QString itemType(); - void setRegisterId(const QString& id) { registerId_ = id; } + virtual void setRegisterId(const QString& id) { registerId_ = id; } QString registerId() const { return registerId_; } - void setRegisterValue(quint16 value); + virtual void setRegisterValue(const QString& registerId, quint16 value); quint16 registerValue() const { return registerValue_; } diff --git a/registermanager.cpp b/registermanager.cpp index 6781fb9..be64571 100644 --- a/registermanager.cpp +++ b/registermanager.cpp @@ -28,7 +28,7 @@ void RegisterManager::updateRegisterValue(const QString& registerId, quint16 val // 更新所有绑定该寄存器的图元 for (Item* item : registerMap[registerId]) { - item->setRegisterValue(value); + item->setRegisterValue(registerId, value); item->update(); // 刷新显示 } }