diff --git a/button.cpp b/button.cpp index 7f68bc0..de7f147 100644 --- a/button.cpp +++ b/button.cpp @@ -1,6 +1,7 @@ #include "button.h" #include #include +#include Button::Button(const QString &type) : Item(type) { @@ -28,3 +29,31 @@ void Button::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QW painter->drawRect(boundingRect()); } } + +void Button::addMenuActions(QMenu *menu) +{ + menu->addAction("置ON"); + menu->addAction("置OFF"); +} + +void Button::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 requestReset(this); + } + if (action->text() == "置ON"){ + emit requestSetON(this, true); + } + if (action->text() == "置OFF"){ + emit requestSetON(this, false); + } +} diff --git a/button.h b/button.h index 083a98f..76874db 100644 --- a/button.h +++ b/button.h @@ -10,6 +10,8 @@ public: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *) override; + void addMenuActions(QMenu *menu) override; + void handleMenuAction(QAction *action) override; }; #endif // BUTTON_H diff --git a/item.h b/item.h index 6e667fa..4798186 100644 --- a/item.h +++ b/item.h @@ -39,6 +39,7 @@ signals: void requestBindRegister(Item*); void requestCompare(Item*); void requestReset(Item*); + void requestSetON(Item*, bool isON); protected: void MenuActions(QMenu *menu); diff --git a/mainwindow.cpp b/mainwindow.cpp index ebc57fd..91cc135 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -112,6 +112,8 @@ void MainWindow::newPage(bool isPlc) registerManager, &RegisterManager::bindItem); connect(newView, &MyGraphicsView::itemResetRegister, registerManager, &RegisterManager::unbindItem); + connect(newView, &MyGraphicsView::itemSetON, + modbusManager, &ModbusManager::writeRegister); } } diff --git a/mygraphicsview.cpp b/mygraphicsview.cpp index c348d82..5085412 100644 --- a/mygraphicsview.cpp +++ b/mygraphicsview.cpp @@ -52,6 +52,7 @@ void MyGraphicsView::dropEvent(QDropEvent *event) connect(item, &Item::requestBindRegister, this, &MyGraphicsView::onItemRequestBindRegister); connect(item, &Item::requestCompare, this, &MyGraphicsView::onItemRequestCompare); connect(item, &Item::requestReset, this, &MyGraphicsView::onItemRequestReset); + connect(item, &Item::requestSetON,this, &MyGraphicsView::onItemRequestSetON); scene()->addItem(item); event->acceptProposedAction(); @@ -241,6 +242,18 @@ void MyGraphicsView::onItemRequestReset(Item *item) } } +void MyGraphicsView::onItemRequestSetON(Item *item, bool isON) +{ + if (isON) + { + emit itemSetON(item->registerId(), 1); + } + else + { + emit itemSetON(item->registerId(), 0); + } +} + void MyGraphicsView::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { diff --git a/mygraphicsview.h b/mygraphicsview.h index e5a3f04..0b53170 100644 --- a/mygraphicsview.h +++ b/mygraphicsview.h @@ -31,6 +31,7 @@ protected: signals: void itemBoundToRegister(Item*, QString); void itemResetRegister(Item*, QString); + void itemSetON(QString, quint16); private: Item* anchorItemAt(const QPoint& viewPos, Item::AnchorType& anchorType); @@ -51,6 +52,7 @@ public slots: void onItemRequestBindRegister(Item*); void onItemRequestCompare(Item*); void onItemRequestReset(Item*); + void onItemRequestSetON(Item*, bool isON); }; #endif // MYGRAPHICSVIEW_H