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

北京网站建设制作开发中国没公司怎么做网站

北京网站建设制作开发,中国没公司怎么做网站,国内知名网站建设公司,wordpress 文章菜单需求#xff1a; 不同线程#xff0c;或者同一线程的不同类之间通信#xff0c;按照Qt的机制#xff0c;定义一个信号#xff0c;一个槽#xff0c;然后绑定。以两个类A,B为例#xff0c;A触发一个信号#xff0c;B执行一个槽#xff0c;在定义好信号和槽之后#x…需求 不同线程或者同一线程的不同类之间通信按照Qt的机制定义一个信号一个槽然后绑定。以两个类A,B为例A触发一个信号B执行一个槽在定义好信号和槽之后需要在另一处将两个类的信号和槽进行绑定。如果模块特别多绑了绑去 略显麻烦耦合性太高。 此处分享一个类别人写的忘记了在哪看到的。可以将上述问题解决降低耦合性。 使用 1A B两个类都需要包含头文件。#include PSEventController.h 2, A类中触发的地方调用publish函数。 //比如按下按钮 需提供一个唯一的标识字符串可自定义参数 PSEventController::publish(actionName.toLatin1(),Q_ARG(bool,isChecked)); 3B类中 定义 on_psEvent_xxx 函数并实现。 //此处的addLine 即为上述pulish 函数中的第一个参数isChecked 为publis中的第二个参数 void on_psEvent_addLine(bool isChecked); 4B类中初始化的时候 执行 subscribe 函数。 PSEventController::subscribe(this,addLine); 这样A 和B 两个类 发布和订阅的唯一字符串标识符只要一致A 在pubsh 的时候 B 就可以subscribe到并且A 和B 完全耦合相互不可见。 具体代码 //PSEventController.h #ifndef PSEVENTCONTROLLER_H #define PSEVENTCONTROLLER_H#include QObject #include QReadWriteLock #include QMap #include QList#define METHOD_PREFIX on_psEvent_class PSEventController : public QObject {Q_OBJECT public:static void unSubscribe(QObject* listener, const QByteArray eventName);static bool subscribe(QObject* listener, const QByteArray eventName);static bool publish(const QByteArray eventName, Qt::ConnectionType connectionType,QGenericArgument val0 QGenericArgument(), QGenericArgument val1 QGenericArgument(),QGenericArgument val2 QGenericArgument(), QGenericArgument val3 QGenericArgument(),QGenericArgument val4 QGenericArgument(), QGenericArgument val5 QGenericArgument(),QGenericArgument val6 QGenericArgument(), QGenericArgument val7 QGenericArgument(),QGenericArgument val8 QGenericArgument(), QGenericArgument val9 QGenericArgument());static inline bool publish(const QByteArray eventName,QGenericArgument val0 QGenericArgument(), QGenericArgument val1 QGenericArgument(),QGenericArgument val2 QGenericArgument(), QGenericArgument val3 QGenericArgument(),QGenericArgument val4 QGenericArgument(), QGenericArgument val5 QGenericArgument(),QGenericArgument val6 QGenericArgument(), QGenericArgument val7 QGenericArgument(),QGenericArgument val8 QGenericArgument(), QGenericArgument val9 QGenericArgument()){return publish(eventName, Qt::AutoConnection, val0, val1, val2, val3, val4, val5, val6, val7, val8, val9);}static inline QString get_Errors(){return ps_LastError_;}static inline void clearEvents(){QWriteLocker locker(ps_Lock_);psEvents_pool_.clear();}static inline QByteArray methodFormatting(const QByteArray eventName) {return METHOD_PREFIX eventName;} private:static QMapQByteArray, QListQObject* psEvents_pool_;static QReadWriteLock ps_Lock_;static QString ps_LastError_; };#endif // PSEVENTCONTROLLER_H//PSEventController.cpp #include PSEventController.h #include QWriteLockerQMapQByteArray, QListQObject* PSEventController::psEvents_pool_; QReadWriteLock PSEventController::ps_Lock_; QString PSEventController::ps_LastError_;void PSEventController::unSubscribe(QObject* listener, const QByteArray eventName) {QWriteLocker locker(ps_Lock_);int index -1;if (psEvents_pool_.contains(eventName) (index psEvents_pool_[eventName].indexOf(listener)) 0 index psEvents_pool_[eventName].count())psEvents_pool_[eventName].takeAt(index); }bool PSEventController::subscribe(QObject* listener, const QByteArray eventName) {QWriteLocker locker(ps_Lock_);if (psEvents_pool_.contains(eventName)) {if (-1 ! psEvents_pool_[eventName].indexOf(listener)) {ps_LastError_ QString(This object is subscribed to this eventName);return false;}psEvents_pool_[eventName].push_back(listener);return true;} else {psEvents_pool_.insert(eventName, { listener });return true;} }bool PSEventController::publish(const QByteArray eventName, Qt::ConnectionType connectionType,QGenericArgument val0, QGenericArgument val1, QGenericArgument val2, QGenericArgument val3,QGenericArgument val4, QGenericArgument val5, QGenericArgument val6, QGenericArgument val7,QGenericArgument val8, QGenericArgument val9) {QReadLocker locker(ps_Lock_);if (!psEvents_pool_.contains(eventName)) {ps_LastError_ QString(No objects subscribe to this eventName);return false;}auto methodName methodFormatting(eventName);QStringList errors;for (auto listener : psEvents_pool_[eventName]) {if (!listener)continue;auto ret QMetaObject::invokeMethod(listener, methodName, connectionType,val0, val1, val2, val3, val4, val5, val6, val7, val8, val9);if (!ret)errors.append(QString(%1:%2).arg(listener-metaObject()-className()).arg(listener-objectName()));}if (errors.isEmpty())return true;ps_LastError_ QString(%1 execution failed:[\n).arg(QString(eventName));for (auto err : errors)ps_LastError_ QString(%1;\n).arg(err);ps_LastError_ ]\n;return false; }
http://www.w-s-a.com/news/423993/

相关文章:

  • 东莞网站建设价位软件开发税率是13%还是6
  • 企业网站建设一条龙如何在网上推广自己
  • 成品网站制作公司企梦网站建设
  • 网站开发微信授权登录ftp 如何 更新 wordpress
  • icp备案和网站不符查询公司的网站备案
  • 万江营销型网站建设泰安网站建设制作电话号码
  • 做网站是用ps还是ai服饰东莞网站建设
  • 只做一页的网站多少钱网站开发就业趋势
  • 陈村网站建设有哪些网站可以做店面设计
  • 查询网站注册信息wordpress 照片墙
  • 成都网站设计服务商室内设计设计师网站推荐
  • 企业建站系统cms百度网址ip
  • wordpress 代码编辑插件下载搜索引擎优化seo课程总结
  • 韩都衣舍网站建设的改进邯郸公众号小程序制作
  • 上海设计网站建设在线视频制作
  • 东营高端网站建设新建网站如何让百度收录
  • wordpress怎么生成网站地图微网站平台怎样做网站
  • 同安区建设局网站招投标公众号简介有趣的文案
  • 江苏州 网站制作网上宣传方法有哪些
  • 做网站时怎样申请域名郑州制作网站公司
  • 深圳 网站开发公司电话网站关键词快排名
  • 网站建设的工作总结seo同行网站
  • 网站需要兼容哪些浏览器sql数据库做的网站怎么发布
  • 营销型网站的建站步骤是什么意思广州门户网站建设公司
  • 汕尾好网站建设推广计算机软件包含网站开发
  • 建设工程施工许可证在哪个网站办wordpress更换主题白屏
  • 微交易网站建设wordpress摘要调用
  • 做网站维护需要懂什么网站后台后缀名
  • 网站建设的认可桂平市住房和城乡建设局网站
  • 网站设计师岗位职责域名关键词查询