// registermanager.cpp #include "registermanager.h" #include "item.h" RegisterManager::RegisterManager(QObject *parent) : QObject(parent) {} void RegisterManager::bindItem(Item* item, const QString& registerId) { if (registerId.isEmpty() || !item) return; // 添加到映射表 registerMap[registerId].append(item); // 连接图元销毁信号 connect(item, &Item::destroyed, this, [this, item, registerId](){ if (registerMap.contains(registerId)) { registerMap[registerId].removeAll(item); if (registerMap[registerId].isEmpty()) { registerMap.remove(registerId); } } }); } void RegisterManager::unbindItem(Item *item, const QString ®isterId) { if (registerMap.contains(registerId)) { // 从寄存器映射中移除元件 QList& items = registerMap[registerId]; items.removeAll(item); // 如果列表为空则移除整个条目 if (items.isEmpty()) { registerMap.remove(registerId); } // 断开该寄存器的销毁信号连接 disconnect(item, &Item::destroyed, this, nullptr); } } void RegisterManager::updateRegisterValue(const QString& registerId, quint16 value) { if (!registerMap.contains(registerId)) return; // 更新所有绑定该寄存器的图元 for (Item* item : registerMap[registerId]) { item->setRegisterValue(registerId, value); item->update(); // 刷新显示 } } QStringList RegisterManager::getAllRegisteredRegisters() const { return registerMap.keys(); } QList RegisterManager::getItemsForRegister(const QString& registerId) const { return registerMap.value(registerId, QList()); }