由Qt中qApp想到的(这是单例模式么???)

From: http://blog.csdn.net/qq575787460/article/details/7880972

学Qt时,发现只要包含头文件QApplication或者QCoreapplication,就用使用qApp,指向一个当前实例。

查看源码发现qApp是个宏:

QApplication中:#define qApp (static_cast<QApplication *>(QCoreApplication::instance()))

QCoreapplication中:#define qApp QCoreApplication::instance()

所以可以肯定的是QCoreApplication有个静态函数instance()返回指向自己的指针。

[cpp] view plaincopy
  1. static QCoreApplication *instance() { return self; }  
这个函数返回self,看大片self也定义为静态指针:

[cpp] view plaincopy
  1. static QCoreApplication *self;  

在QCoreapplication.cpp中有如下代码:

[cpp] view plaincopy
  1. void QCoreApplication::init()  
  2. {  
  3.     ......  
  4.     QCoreApplication::self = this;  
  5.     ......  
  6. }  

QCoreapplication构造函数中又调用init()

[cpp] view plaincopy
  1. QCoreApplication::QCoreApplication(QCoreApplicationPrivate &p)  
  2.     : QObject(p, 0)  
  3. {  
  4.     init();  
  5.     // note: it is the subclasses' job to call  
  6.     // QCoreApplicationPrivate::eventDispatcher->startingUp();  
  7. }  

所以就是:定义程序唯一的实例时,初始化self指向自身。qApp是一个宏,替换后为调用相应的instance()。


自己模仿的:

myApplication.h

[cpp] view plaincopy
  1. #ifndef MYAPPLICATION_H  
  2. #define MYAPPLICATION_H  
  3.   
  4. #include <string>  
  5. using std::string;  
  6.   
  7. #define myApp myApplication::instance()  
  8.   
  9. class myApplication  
  10. {  
  11. public:  
  12.     myApplication(string _appName);  
  13.   
  14.     static myApplication* instance(){return self;}  
  15.     void printAppName();  
  16. private:  
  17.     //指向自己的实例句柄  
  18.     static myApplication *self;  
  19.     string appName;  
  20. };  
  21.   
  22. #endif // MYAPPLICATION_H  
myApplication.cpp

[cpp] view plaincopy
  1. #include "myapplication.h"  
  2. #include <iostream>  
  3. using std::cout;  
  4. using std::endl;  
  5.   
  6. myApplication::myApplication(string _appName):appName(_appName)  
  7. {  
  8.     if(self!=0)  
  9.         return;  
  10.     else  
  11.         self=this;  
  12. }  
  13.   
  14. void myApplication::printAppName()  
  15. {  
  16.         cout<<appName<<endl;  
  17. }  
  18.   
  19. myApplication* myApplication::self=0;  

main.cpp

[cpp] view plaincopy
  1. #include "myapplication.h"  
  2.   
  3. extern void print1();  
  4. extern void print2();  
  5.   
  6. int main()  
  7. {  
  8.     print1();  
  9.     print2();  
  10.   
  11.     myApplication app("实例测试");  
  12.     print1();  
  13.     print2();  
  14.     app.printAppName();  
  15.     myApp->printAppName();  
  16.   
  17.     return 0;  
  18. }  
print1.cpp

[cpp] view plaincopy
  1. /* 
  2.   测试函数,测试通过myApp输出唯一的实例名 
  3. */  
  4. #include "myapplication.h"  
  5. #include <iostream>  
  6.   
  7. void print1()  
  8. {  
  9.     if(myApp==0)  
  10.         std::cout<<"myApp没有实例化"<<std::endl;  
  11.     else  
  12.         myApp->printAppName();  
  13. }  
print2.cpp

[cpp] view plaincopy
  1. /* 
  2.   测试函数,测试通过myApp输出唯一的实例名 
  3. */  
  4. #include "myapplication.h"  
  5. #include <iostream>  
  6.   
  7. void print2()  
  8. {  
  9.     if(myApp==0)  
  10.         std::cout<<"myApp没有实例化"<<std::endl;  
  11.     else  
  12.         myApp->printAppName();  
  13. }  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bootstrap基础学习十篇

bootstrap字体图标&#xff08;Glyphicons&#xff09; a.什么是字体图标 字体图标是在 Web 项目中使用的图标字体。虽然&#xff0c;Glyphicons Halflings 需要商业许可&#xff0c;但是您可以通过基于项目的 Bootstrap 来免费使用这些图标。 b.bootstrap自带字体图标文件结构…

Python 用hashlib求中文字符串的MD5值

From&#xff1a; http://blog.csdn.net/haungrui/article/details/6959340 使用过hashlib库的朋友想必都遇到过以下的错误吧&#xff1a;“Unicode-objects must be encoded before hashing”&#xff0c;意思是在进行md5哈希运算前&#xff0c;需要对数据进行编码。而且在不…

JS中的Replace方法

最近查一个bug&#xff0c;原因是JS中的Replace方法造成的&#xff0c;当将一个字符串中有处需要替换时&#xff0c;一般会用到JS中的Replace方法&#xff0c;Replace方法的第一个参数如果是传的字符串&#xff0c;只会替换第一处。代码如下&#xff1a; var str "0CEA65…

VMware 9 安装 Mac OS X 10.8 Mountain Lion 图文全程

From: http://unmi.cc/vmware9-install-mac-os-x-mountain-lion/#comment-8684 本教程是在 VMware 9 下安装当前最新版的 Mac OS X Mountain Lion 苹果系统。曾在 VirtualBox/VMware 下安装过 Mac OS Lion 系统&#xff0c;但安装后是无法升级到 Mountain Lion 的&#xff0c;所…

初识Vulkan

Vulkan是Khronos组织制定的“下一代”开放的图形显示API&#xff0c;是与DirectX12可以匹敌的GPU API标准。Vulkan是基于AMD的Mantle API演化而来&#xff0c;目前Vulkan 1.0标准已经完成并正式发布。上一代的OpenGL|ES并不会被遗弃&#xff0c;还会继续发展&#xff0c;很有可…

java_IO流之 NIO

NIO 定义 即新IO&#xff0c;在JDK1.4的java.nio.*包中引入&#xff0c;其目的在于提高速度。 在Java1.4之前的I/O系统中&#xff0c;提供的都是面向流的I/O系统&#xff0c;系统一次一个字节地处理数据&#xff0c;一个输入流产生一个字节的数据&#xff0c;一个输出流消费一个…

“我的电脑”右键“管理”打不开,提示“该文件没有与之关联的程序来执行该操作“

From: http://bbs.kafan.cn/thread-1240058-1-1.html 如图&#xff1a; 右键单击桌面上的“我的电脑”&#xff0c;再点“管理”就弹出这个对话框了。 【该文件没有与之关联的程序来执行该操作。请安装一个程序&#xff0c;或者&#xff0c;如果已安装程序&#xff0c;请在“…

[交流] 新手常见(五国)(-v图)错误解决(原版,破解kernel,补丁kext下载)

From: http://blog.csdn.net/ashuai81/article/details/8032952 原文出处&#xff1a;http://bbs.pcbeta.com/viewthread-863656-1-1.html 谢谢大神&#xff0c; 看了这个才弄出了黑苹果。 在可安装的主版硬件上&#xff0c;安装Mac不该是个大问题&#xff0c;声卡、显卡、…

四则运算题1

/*信息&#xff1a;20133075 张勋 《随机生成30道四则运算题目》要求&#xff1a;除整数外&#xff0c;还要支持真分数的四则运算设计思路&#xff1a; 1.通过radom函数生成自然数&#xff0c;给变量赋值 2.另一个变量是真分数&#xff0c;分子比分母小 3.随机生成四则运…

H264中的SPS、PPS提取与作用

From: http://blog.csdn.net/sunnylgz/article/details/7680262 牛逼的视频会议网站&#xff1a;http://wmnmtm.blog.163.com/blog/#m0 http://wmnmtm.blog.163.com/blog/static/38245714201192491746701/ 使用RTP传输H264的时候,需要用到sdp协议描述,其中有两项:Sequence Pa…

H264参数语法文档: SPS、PPS、IDR

From: http://blog.csdn.net/heanyu/article/details/6205390 H.264码流第一个 NALU 是 SPS&#xff08;序列参数集Sequence Parameter Set&#xff09; 对应H264标准文档 7.3.2.1 序列参数集的语法进行解析 SPS参数解析// fill sps with content of p[cpp] view plaincopyint …

React封装一个组件弹出框

目录 前言 代码 简要 引用 效果 前言 我是歌谣 放弃很容易 但是坚持一定很酷 为了保证react代码的一个简洁性 最近开始封装组件, 直接上代码 因为都很简单的模式 这边直接进行讲解 代码 //取消机构和取消讲师的方法封装 //params visible控制弹框的一个现实和隐藏 import…

Pytorch项目(模型训练与优化),肺癌检测项目之六

数据优化方案 数据优化方案1&#xff1a;重复抽样 &#xff08;1&#xff09;对多数类的样本实施欠采样&#xff0c;减少多数类数量 &#xff08;2&#xff09;对少数类的样本实施过采样&#xff0c;增加少数类数量 数据优化方案2&#xff1a;数据增强 数据增强&#xff08…

【数据库】SQL查询强化篇

查询是数据库的基本应用之一&#xff0c;oracle中的SQL查询语法&#xff0c;一方面遵循了SQL标准&#xff0c;另一方面又有自己的独特之处。 从而使得oracle中的SQL查询功能更加强大。接下来将会涉及oracle中的SQL查询语句&#xff0c;包括&#xff1a; 基本查询&#xff1a;主…

[python3] pyton socket 同步通信举例

本文比较简单&#xff0c;适合入门用&#xff0c;作个笔记&#xff0c;方便日后抄写 一个服务端&#xff0c;一个客户端&#xff0c;而且是阻塞方式&#xff0c;一次只能接受一个客户端连接并通信噢。 客户端发送‘bye, 结束与服务端的通信&#xff0c;如果发送’shutdown&…

第三周仿真作业

1.设计要求 结合本周学习的直流电机机械特性&#xff0c;用Modelica设计和仿真一个直流电机串电阻启动过程&#xff0c;具体要求如下&#xff1a; 1&#xff09;电机工作在额定电压和额定磁通下&#xff0c;采用串三段或四段电阻启动&#xff0c;整个启动过程电枢电流中不能超过…