您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

45 行
1.2 KiB

  1. // registermanager.cpp
  2. #include "registermanager.h"
  3. #include "item.h"
  4. RegisterManager::RegisterManager(QObject *parent) : QObject(parent) {}
  5. void RegisterManager::bindItem(Item* item, const QString& registerId)
  6. {
  7. if (registerId.isEmpty() || !item) return;
  8. // 添加到映射表
  9. registerMap[registerId].append(item);
  10. // 连接图元销毁信号
  11. connect(item, &Item::destroyed, this, [this, item, registerId](){
  12. if (registerMap.contains(registerId)) {
  13. registerMap[registerId].removeAll(item);
  14. if (registerMap[registerId].isEmpty()) {
  15. registerMap.remove(registerId);
  16. }
  17. }
  18. });
  19. }
  20. void RegisterManager::updateRegisterValue(const QString& registerId, quint16 value)
  21. {
  22. if (!registerMap.contains(registerId)) return;
  23. // 更新所有绑定该寄存器的图元
  24. for (Item* item : registerMap[registerId]) {
  25. item->setRegisterValue(value);
  26. item->update(); // 刷新显示
  27. }
  28. }
  29. QStringList RegisterManager::getAllRegisteredRegisters() const
  30. {
  31. return registerMap.keys();
  32. }
  33. QList<Item*> RegisterManager::getItemsForRegister(const QString& registerId) const
  34. {
  35. return registerMap.value(registerId, QList<Item*>());
  36. }