瀏覽代碼

比较指令的状态改变

master
鹏鹏 李 1 天之前
父節點
當前提交
813f2df497
共有 9 個文件被更改,包括 128 次插入5 次删除
  1. +2
    -2
      coil.cpp
  2. +44
    -1
      comparator.cpp
  3. +5
    -0
      comparator.h
  4. +1
    -1
      editor.pro.user
  5. +5
    -0
      item.cpp
  6. +3
    -1
      item.h
  7. +53
    -0
      item.h.autosave
  8. +14
    -0
      mygraphicsview.cpp
  9. +1
    -0
      mygraphicsview.h

+ 2
- 2
coil.cpp 查看文件

@@ -11,10 +11,10 @@ void Coil::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWid
{ {
painter->setRenderHint(QPainter::Antialiasing); painter->setRenderHint(QPainter::Antialiasing);


if (registerValue_ > 0) {
if (state()) {
painter->setBrush(Qt::green); // 激活状态 painter->setBrush(Qt::green); // 激活状态
} else { } else {
painter->setBrush(Qt::black); // 未激活状态
painter->setBrush(Qt::white); // 未激活状态
} }
if (type_ == "线圈") { if (type_ == "线圈") {
// 绘制线圈样式: 两边线段+中间椭圆 // 绘制线圈样式: 两边线段+中间椭圆


+ 44
- 1
comparator.cpp 查看文件

@@ -1,4 +1,5 @@
#include "comparator.h" #include "comparator.h"
#include <QMenu>
#include <QPainter> #include <QPainter>
#include <QStyleOptionGraphicsItem> #include <QStyleOptionGraphicsItem>


@@ -15,10 +16,15 @@ QRectF Comparator::boundingRect() const
void Comparator::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *) void Comparator::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *)
{ {
painter->setRenderHint(QPainter::Antialiasing); painter->setRenderHint(QPainter::Antialiasing);
if (state()) {
painter->setBrush(Qt::green); // 激活状态
} else {
painter->setBrush(Qt::white); // 未激活状态
}
if (type_ == "比较") { if (type_ == "比较") {
painter->drawRect(QRectF(-12, -8, 24, 16)); painter->drawRect(QRectF(-12, -8, 24, 16));
painter->setFont(QFont("Arial", 8)); painter->setFont(QFont("Arial", 8));
painter->drawText(QRectF(-10, -8, 20, 16), Qt::AlignCenter, "CP");
painter->drawText(QRectF(-10, -8, 20, 16), Qt::AlignCenter, compare_);


// 锚点 // 锚点
painter->setBrush(Qt::darkGray); painter->setBrush(Qt::darkGray);
@@ -75,3 +81,40 @@ void Comparator::setRegisterValue(const QString &registerId, quint16 value)
update(); // 触发重绘 update(); // 触发重绘
} }
} }

void Comparator::addMenuActions(QMenu *menu)
{
menu->addAction("比较");
}

void Comparator::handleMenuAction(QAction *action)
{
if (action->text() == "复制") {
emit requestCopy(this);
}
if (action->text() == "删除") {
emit requestDelete(this);
}
if (action->text() == "对象"){
emit requestBindRegister(this);
}
if (action->text() == "比较"){
emit requestCompare(this);
}
}

void Comparator::setCompare(QString compare)
{
compare_ = compare;
update();
}

bool Comparator::state() const
{
if (compare_ == ">") return registerValue_ > registerValue2_;
if (compare_ == "<") return registerValue_ < registerValue2_;
if (compare_ == "=") return registerValue_ == registerValue2_;
if (compare_ == ">=") return registerValue_ >= registerValue2_;
if (compare_ == "<") return registerValue_ <= registerValue2_;
return false;
}

+ 5
- 0
comparator.h 查看文件

@@ -12,10 +12,15 @@ public:
QWidget *) override; QWidget *) override;
void setRegisterId(const QString &id) override; void setRegisterId(const QString &id) override;
void setRegisterValue(const QString &registerId, quint16 value) override; void setRegisterValue(const QString &registerId, quint16 value) override;
void addMenuActions(QMenu *menu) override;
void handleMenuAction(QAction *action) override;
void setCompare(QString) override;
bool state() const override;


private: private:
QString registerId2_; QString registerId2_;
quint16 registerValue2_ = 0; quint16 registerValue2_ = 0;
QString compare_ = "CP";
}; };


#endif // COMPARATOR_H #endif // COMPARATOR_H

+ 1
- 1
editor.pro.user 查看文件

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.11.1, 2025-08-09T09:34:13. -->
<!-- Written by QtCreator 4.11.1, 2025-08-09T12:58:16. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>


+ 5
- 0
item.cpp 查看文件

@@ -58,6 +58,11 @@ QString Item::itemType()
return type_; return type_;
} }


void Item::setRegisterId(const QString &id)
{
registerId_ = id;
}

void Item::setRegisterValue(const QString &registerId, quint16 value) void Item::setRegisterValue(const QString &registerId, quint16 value)
{ {
if (registerId_ == registerId) if (registerId_ == registerId)


+ 3
- 1
item.h 查看文件

@@ -26,6 +26,7 @@ public:
virtual void setRegisterValue(const QString& registerId, quint16 value); virtual void setRegisterValue(const QString& registerId, quint16 value);
quint16 registerValue() const { return registerValue_; } quint16 registerValue() const { return registerValue_; }


virtual void setCompare(QString) {}


// 添加状态属性(用于线圈、触点等) // 添加状态属性(用于线圈、触点等)
virtual bool state() const { return false; } virtual bool state() const { return false; }
@@ -35,9 +36,10 @@ signals:
void requestCopy(Item*); void requestCopy(Item*);
void requestDelete(Item*); void requestDelete(Item*);
void requestBindRegister(Item*); void requestBindRegister(Item*);
void requestCompare(Item*);


protected: protected:
virtual void MenuActions(QMenu *menu);
void MenuActions(QMenu *menu);
virtual void addMenuActions(QMenu *menu); virtual void addMenuActions(QMenu *menu);
virtual void handleMenuAction(QAction *action); virtual void handleMenuAction(QAction *action);
QVariant itemChange(GraphicsItemChange change, const QVariant &value) override; QVariant itemChange(GraphicsItemChange change, const QVariant &value) override;


+ 53
- 0
item.h.autosave 查看文件

@@ -0,0 +1,53 @@
#ifndef ITEM_H
#define ITEM_H

#include <QGraphicsObject>
#include <QColor>
#include <QList>
#include <QAction>

class Connection;

class Item : public QGraphicsObject
{
Q_OBJECT
public:
enum AnchorType { Left, Right };
explicit Item(const QString &type, QGraphicsItem *parent = nullptr);

QRectF boundingRect() const override;
QPointF anchorPos(AnchorType type) const;
void addConnection(Connection* conn);
void removeConnection(Connection* conn);
QList<Connection*> connections();
QString itemType();
virtual void setRegisterId(const QString& id);
QString registerId() const { return registerId_; }
virtual void setRegisterValue(const QString& registerId, quint16 value);
quint16 registerValue() const { return registerValue_; }

virtual void setCompare(QString) {}

// 添加状态属性(用于线圈、触点等)
virtual bool state() const { return false; }


signals:
void requestCopy(Item*);
void requestDelete(Item*);
void requestBindRegister(Item*);
void requestCompare(Item*);

protected:
void MenuActions(QMenu *menu);
virtual void addMenuActions(QMenu *menu);
virtual void handleMenuAction(QAction *action);
QVariant itemChange(GraphicsItemChange change, const QVariant &value) override;
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override;
QString type_;
QList<Connection*> connections_;
QString registerId_;
quint16 registerValue_ = 0;
};

#endif // ITEM_H

+ 14
- 0
mygraphicsview.cpp 查看文件

@@ -50,6 +50,7 @@ void MyGraphicsView::dropEvent(QDropEvent *event)
connect(item, &Item::requestCopy, this, &MyGraphicsView::onItemRequestCopy); connect(item, &Item::requestCopy, this, &MyGraphicsView::onItemRequestCopy);
connect(item, &Item::requestDelete, this, &MyGraphicsView::onItemRequestDelete); connect(item, &Item::requestDelete, this, &MyGraphicsView::onItemRequestDelete);
connect(item, &Item::requestBindRegister, this, &MyGraphicsView::onItemRequestBindRegister); connect(item, &Item::requestBindRegister, this, &MyGraphicsView::onItemRequestBindRegister);
connect(item, &Item::requestCompare, this, &MyGraphicsView::onItemRequestCompare);
scene()->addItem(item); scene()->addItem(item);


event->acceptProposedAction(); event->acceptProposedAction();
@@ -209,6 +210,19 @@ void MyGraphicsView::onItemRequestBindRegister(Item *item)
} }
} }


void MyGraphicsView::onItemRequestCompare(Item *item)
{
if (!item) return;

QString compare = QInputDialog::getText(
this,
"绑定寄存器",
"格式:>、<、=、<=、>=",
QLineEdit::Normal
);
item->setCompare(compare);
}

void MyGraphicsView::mousePressEvent(QMouseEvent *event) void MyGraphicsView::mousePressEvent(QMouseEvent *event)
{ {
if (event->button() == Qt::LeftButton) { if (event->button() == Qt::LeftButton) {


+ 1
- 0
mygraphicsview.h 查看文件

@@ -48,6 +48,7 @@ public slots:
void onItemRequestCopy(Item*); void onItemRequestCopy(Item*);
void onItemRequestDelete(Item*); void onItemRequestDelete(Item*);
void onItemRequestBindRegister(Item*); void onItemRequestBindRegister(Item*);
void onItemRequestCompare(Item*);
}; };


#endif // MYGRAPHICSVIEW_H #endif // MYGRAPHICSVIEW_H

Loading…
取消
儲存