|
- #include "hmiled.h"
- #include <QPainter>
- #include <QMenu>
- #include <QAction>
- #include <QGraphicsScene>
-
- // 构造函数:初始化指示灯控件
- HmiLed::HmiLed(QGraphicsItem* parent)
- : HmiControlItem(parent) {
- }
-
- // 返回指示灯的边界矩形
- QRectF HmiLed::boundingRect() const {
- return QRectF(0, 0, 60, 60).adjusted(-1, -1, 1, 1);
- }
-
- // 绘制指示灯:根据状态绘制圆形,使用ON或OFF状态颜色
- void HmiLed::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
- {
- Q_UNUSED(option); // 消除未使用参数警告
- Q_UNUSED(widget); // 消除未使用参数警告
- painter->setRenderHint(QPainter::Antialiasing); // 启用抗锯齿
- painter->setPen(Qt::black); // 设置边框颜色
- painter->setBrush(m_isLedOn ? m_ledOnColor : m_ledOffColor); // 根据状态设置填充颜色
- qreal size = qMin(boundingRect().width(), boundingRect().height());
- painter->drawEllipse(0, 0, size - 2, size - 2); // 绘制圆形
- painter->drawText(QRectF(0, 0, size - 2, size - 2), Qt::AlignCenter, ""); // 空文本(占位)
- if (isSelected()) {
- // 选中时绘制虚线边框
- painter->setPen(QPen(Qt::black, 1, Qt::DashLine));
- painter->setBrush(Qt::NoBrush);
- painter->drawRect(boundingRect().adjusted(1, 1, -1, -1));
- }
- }
-
- // 创建指示灯的右键菜单
- void HmiLed::createContextMenu(QMenu& menu) {
- // 调用基类的右键菜单,添加寄存器绑定选项
- HmiControlItem::createContextMenu(menu);
-
- // 删除选项
- QAction* deleteAction = new QAction("删除", &menu);
- QObject::connect(deleteAction, &QAction::triggered, [this]() { deleteItem(); });
-
- // 复制选项
- QAction* copyAction = new QAction("复制", &menu);
- QObject::connect(copyAction, &QAction::triggered, [this]() {
- copyToClipboard(saveToClipboard());
- });
-
- // 更改外观子菜单
- QMenu* appearanceMenu = menu.addMenu("更改外观");
- QAction* changeOnAppearance = new QAction("设置ON状态颜色", appearanceMenu);
- QObject::connect(changeOnAppearance, &QAction::triggered,
- [this]() { changeAppearanceColor(true, m_ledOnColor, m_ledOffColor); });
-
- QAction* changeOffAppearance = new QAction("设置OFF状态颜色", appearanceMenu);
- QObject::connect(changeOffAppearance, &QAction::triggered,
- [this]() { changeAppearanceColor(false, m_ledOnColor, m_ledOffColor); });
-
- // 添加菜单项
- menu.addAction(copyAction);
- menu.addSeparator();
- menu.addMenu(appearanceMenu);
- appearanceMenu->addAction(changeOnAppearance);
- appearanceMenu->addAction(changeOffAppearance);
- menu.addSeparator();
- menu.addAction(deleteAction);
- }
-
- // 保存指示灯数据到剪贴板
- QVariantMap HmiLed::saveToClipboard() const {
- QVariantMap data = HmiControlItem::saveToClipboard();
- data["isLedOn"] = m_isLedOn;
- data["onColor"] = m_ledOnColor.name();
- data["offColor"] = m_ledOffColor.name();
- return data;
- }
-
- // 设置指示灯状态并触发重绘
- void HmiLed::setLedState(bool on) {
- m_isLedOn = on;
- update();
- }
|