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

Qt 单例模式第一次尝试

头图

文章目录

    • 摘要
    • 单例模式
    • 如何使用
    • Qt 的属性系统
    • 总结

关键字: Qt单例Q_GLOBAL_STATIC女神节

摘要

世界上第一位电脑程序设计师是名女性:Ada Lovelace (1815-1852)是一位英国数学家兼作家,她是第一位主张计算机不只可以用来算数的人,也发表了第一段分析机用的演算法。因此,Ada 被公认为史上第一位认识电脑完全潜能的人,也是史上第一位电脑程序设计师。女神节就要到了,搞篇文章记录一下。祝福程序猿们女神节快乐。

image-20230307104824032

单例模式

因为项目需要,想这让某一个类只能存在一个,开始是网上各种找,后面发现Qt 自己就有很好的功能,直接上代码吧

Q_GLOBAL_STATIC(Turing_ElectroPhysiology,turing_ElectroPhysiology)          // 单例宏

这样,就可以了,这里展示部分代码。

头文件如下:

public:Turing_ElectroPhysiology();static Turing_ElectroPhysiology* getInstance();~Turing_ElectroPhysiology();

这里有点理解,其实Qt 的这个单例模式是可以和普通的类一样使用的,当我调用构造函数的时候,就是普通类,当我们调用getInstance接口的时候,就是单例了,网上看到的基本都是直接把构造函数私有化。

其实我也尝试过把把构造函数私有化,但是呢,编译不过,所以暂时就先这用。

如何使用

这个就更简单了,平时我们使用的时候用的是 new,这里直接使用接口就了,带么如下:

m_Turing_ElectroPhysiology = Turing_ElectroPhysiology::getInstance();

这样在这个类第一次调用的时候,就会创建一个静态的实例,后面每次调用getInstance接口,返回的都是这个实例,但是当我调用new 的时候,那就是一个新的的实例了。

Qt 的属性系统

Qt 的属性系统是嘎嘎爽,最近迷恋上了这个了,代码如下:

    Q_PROPERTY(int usb_VID READ usb_VID WRITE setUsb_VID NOTIFY usb_VIDChanged)Q_PROPERTY(int usb_PID READ usb_PID WRITE setUsb_PID NOTIFY usb_PIDChanged)Q_PROPERTY(int samplingRate READ samplingRate WRITE setSamplingRate NOTIFY samplingRateChanged)

这个比弄一个公有变量感觉舒服多了,主要要可以正价好多代码,哈哈哈,如果有的公司用代码量作为KPI 的话,这个是不是可以,哈哈啊哈哈哈。

总结

单例模式其实我也是第一次方式使用,对设计模式理解的也不是真么到位,目前还是以实现功能为导向,变推进变学习。所以目前的单例可以满足我的需求。其实这个单例模式就是Qt的线程池的实现方式。

参考代码如下:

class Q_CORE_EXPORT QThreadPool : public QObject
{Q_OBJECTpublic:QThreadPool(QObject *parent = nullptr);~QThreadPool();static QThreadPool *globalInstance();
......
}
qthreadpool.cppQ_GLOBAL_STATIC(QThreadPool, theInstance)
QThreadPool *QThreadPool::globalInstance()
{return theInstance(); // 这里不带括号也行.
}

博客签名2021
http://www.lryc.cn/news/32778.html

相关文章:

  • C语言--一维数组
  • DataGear 4.5.1 发布,数据可视化分析平台
  • Springboot——@valid 做字段校验和自定义注解
  • c语言基础练习题详解
  • C语言设计模式:实现简单工厂模式和工程创建
  • 3.6日报
  • 中文代码88
  • ElasticSearch 基础(五)之 映射
  • 【C语言督学训练营 第二天】C语言中的数据类型及标准输入输出
  • 重资产模式和物流网络将推动京东第四季度利润率增长
  • 【新】EOS至MES的假捻报工数据导入-V2.0版本
  • python甜橙歌曲音乐网站平台源码
  • docker imageID计算
  • 借助媛如意让ROS机器人turtlesim画出美丽的曲线-云课版本
  • 小区业主入户安检小程序开发
  • 【C++知识点】异常处理
  • 【FATE联邦学习debug】 No module named ‘federatedml‘
  • 【Git】P1 Git 基础
  • 智能交通数据集Rope3D(仅限科研使用)
  • Java虚拟机JVM-面试题
  • 详细的说说Redis的数据类型
  • 798.差分矩阵
  • InfluxDB 2 介绍与使用 flux查询 数据可视化
  • Qt QTreeView简单使用
  • Wannacrypt蠕虫老树开花?又见Wannacrypt
  • 结合基于规则和机器学习的方法构建强大的混合系统
  • Spring Security OAuth2实现多用户类型认证、刷新Token
  • 云计算介绍,让你更了解云计算
  • 阿里大佬翻遍全网Java面试文章,总结出这份1658页文档,GitHub收获25K+点赞
  • 【JDK1.8 新特性】Lambda表达式