当前位置: 首页 > news >正文

ski 和 db 模块的通信

ski 和 db 模块的通信

qt 信号槽

创建一个单例类,在 db 模块发送信号,在ski 模块接收

class abSignalEmitter : public QObject {Q_OBJECTpublic:static abSignalEmitter& instance() {static abSignalEmitter instance;return instance;}abSignalEmitter(const abSignalEmitter&) = delete;abSignalEmitter& operator=(const abSignalEmitter&) = delete;void setSkyverse(bool enable) {emit skyverseChanged(enable);}signals:void skyverseChanged(bool enable);public:abSignalEmitter() : QObject() {}~abSignalEmitter() {}
};abSignalEmitter* se = &abSignalEmitter::instance();
connect(se, SIGNAL(skyverseChanged(bool)), this, SLOT(updateSkyverseCB(bool)));

全局事件总线

enum class EventType {DbImageChanged,SharedLayoutChanged
};class abEventBus {public:using Handler = std::function<void(int)>;static abEventBus& instance() {static abEventBus bus;return bus;}void subscribe(EventType event, Handler h) {m_handlers[static_cast<int>(event)].push_back(h);}void publish(EventType event, int value) {auto it = m_handlers.find(static_cast<int>(event));if (it != m_handlers.end()) {for (auto& h : it->second)h(value);}}private:std::map<int, std::vector<Handler>> m_handlers;
};

模块A:

abEventBus::instance().publish(EventType::SharedLayoutChanged, b);

模块B:

abEventBus::instance().subscribe(EventType::SharedLayoutChanged,[this](int b){ updateShmGB(b); });

纯 C++ 观察者模式(无 Qt 依赖)

#ifndef A_H
#define A_H#include <vector>
#include <functional>class A
{
public:using Callback = std::function<void(int)>;void setValue(int v) {if (m_value == v)return;m_value = v;notifyObservers();}int value() const { return m_value; }// 注册观察者void addObserver(const Callback& cb) {m_observers.push_back(cb);}private:void notifyObservers() {for (auto& cb : m_observers) {cb(m_value);}}private:int m_value = 0;std::vector<Callback> m_observers;
};#endif // A_H
#ifndef B_H
#define B_H#include "a.h"
#include <QLabel>class B
{
public:B(A* a, QLabel* label): m_label(label){// 注册监听,当 A 值变化时调用 lambdaa->addObserver([this](int newValue){onAValueChanged(newValue);});}void onAValueChanged(int newValue) {m_label->setText(QString("A's value = %1").arg(newValue));}private:QLabel* m_label;
};#endif // B_H

使用:

A* a = new A();
QLabel* label = new QLabel();
B* b = new B(a, label);a->setValue(100);  // b 的 GUI 自动更新
http://www.zskr.cn/news/28655.html

相关文章:

  • rocky10自己手动换源
  • layui时间与日期选择器,时间范围查询数据,后端springboot
  • 轻量级图片信息解析程序
  • 2025.10.23 闲话-全局位运算 max 的解法
  • express 模块学习 - 东方不败-
  • 习题-无限集与选择公理
  • 题解:CF2115F1 Gellyfish and Lycoris Radiata (Easy Version)
  • 2025铁氟龙/极细铁氟龙/UL系列高温线厂家推荐明秀电子,专业耐用品质保障!
  • LIS 略解
  • 低代码如何引爆全员创新?揭秘技术民主化背后的蒲公英效应
  • 2025水冷螺杆/风冷螺杆冷水机厂家推荐东莞市凯诺机械,高效制冷稳定可靠
  • 日志级别
  • Edge浏览器网页设置深色模式(仅搜索结果界面)
  • 2025 年 AI 编程工具 TOP5 排名:谁在重新定义研发效率?
  • 请求中断的原理与分类
  • 【Go】go学习笔记
  • Web3 行业 Solidity 高级后端开发工程师岗位要求
  • 2025年口罩机厂家权威推荐榜单:全自动口罩机器,全自动KN95口罩机,高效智能生产线专业选购指南
  • 2025不锈钢方形/消防/生活/保温水箱厂家推荐莞南节能,专业耐用品质保障
  • 2025-10-23 DeepSeek R1本地部署(ollama)
  • 海上60公里,5G信号满格?这款神器让远航不再“失联”
  • 2025除尘设备/脉冲除尘器厂家推荐东莞市百谊环保科技,专业高效净化解决方案
  • Docker与Docker-compose安装
  • 杜邦线 2头的
  • 阿里云加持,《泡姆泡姆》让全球玩家畅享零延迟冒险
  • (二)从分层架构到数据湖仓架构:数据仓库分层下的技术架构与举例
  • VScodeC语言结构体成员提示不全
  • 2025滑石粉厂家推荐辽宁精华新材料,纳米级/工业级/化妆品级多品类覆盖
  • 2025真空烧结炉厂家推荐沈阳恒进,专业品质与高效服务双重保障
  • 承插焊异径三通源头厂家推荐上海结申,专业制造高压承插管件