Qt 单例模式第一次尝试
2023-04-18 14:21:18 时间
![头图](https://img-blog.csdnimg.cn/9ac8ac28c6a34a0d89b75e0fbfdb3dfa.png#pic_center)
关键字:
Qt
、
单例
、
的
、
Q_GLOBAL_STATIC
、
女神节
摘要
世界上第一位电脑程序设计师是名女性:Ada Lovelace (1815-1852)是一位英国数学家兼作家,她是第一位主张计算机不只可以用来算数的人,也发表了第一段分析机用的演算法。因此,Ada 被公认为史上第一位认识电脑完全潜能的人,也是史上第一位电脑程序设计师。女神节就要到了,搞篇文章记录一下。祝福程序猿们女神节快乐。
单例模式
因为项目需要,想这让某一个类只能存在一个,开始是网上各种找,后面发现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_OBJECT
public:
QThreadPool(QObject *parent = nullptr);
~QThreadPool();
static QThreadPool *globalInstance();
......
}
qthreadpool.cpp
Q_GLOBAL_STATIC(QThreadPool, theInstance)
QThreadPool *QThreadPool::globalInstance()
{
return theInstance(); // 这里不带括号也行.
}
![博客签名2021](https://img-blog.csdnimg.cn/cba67a62214f47c4be66d1024543cf80.png#pic_center)
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击