#include "hmiled.h" #include #include #include #include // 构造函数:初始化指示灯控件 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(); }