- 博客(28)
- 资源 (12)
- 收藏
- 关注
原创 QListWidget 设置样式表后QListWidgetItem调用setBackgroundColor无效解决办法
法1.去掉QSS完全用成员函数设置item;其实QT 的QSS是一个强大而又方便的特性!法2.完全用QSS在两处设置item;
2023-01-11 22:20:36
2151
1
原创 Q_DECLARE_METATYPE 的应用场景
QT功能很强大,但如果不了解其特性,在使用中就不能发挥出其强大的特性,如Q_DECLARE_METATYPE 元对象系统。
2022-11-27 16:59:30
437
原创 Q_ENUM的作用以及QMetaEnum的优势
传统的枚举类型 在增加程序可读性方面还不够,而QT中的QMetaEnum做了很大的优化,功能很强大。
2022-11-27 11:11:18
1094
原创 MFC框架剖析
创建MFC窗口需要用来的类:CWinAppCFrameWndCWinApp是一个基类,你通过它来继承Windows应用程序对象。应用程序对象为你提供了初始化应用程序(以及它的每一个实例)和运行应用程序所需的成员函数。每个使用微软基础类库的应用程序都只能包含一个从CWinApp继承的对象。当Windows调用WinMain函数时,这个对象在其它C++全局对象都已经生成并且可用之后才被创建,WinMain函数是由微软基础类库提供的。将你的CWinApp对象定义为全局的。当你从CWinApp继承
2022-04-11 14:41:05
2239
原创 C++继承时的名字遮蔽
如果派生类中的成员(包括成员变量和成员函数)和基类中的成员重名,那么就会遮蔽从基类继承过来的成员。所谓遮蔽,就是在派生类中使用该成员(包括在定义派生类时使用,也包括通过派生类对象访问该成员)时,实际上使用的是派生类新增的成员,而不是从基类继承来的。范例#include<iostream>using namespace std;//基类Peopleclass People{public: void show();protected: char *m_nam
2022-03-31 14:16:10
124
原创 C++ 虚函数详解
虚函数对于多态具有决定性的作用,有虚函数才能构成多态规则1) 只需要在虚函数的声明处加上virtual 关键字,函数定义处可以加也可以不加2) 为了方便,你可以只将基类中的函数声明为虚函数,这样所有派生类中具有遮蔽(覆盖)关系的同名函数都将自动成为虚函数3) 当在基类中定义了虚函数时,如果派生类没有定义新的函数来遮蔽此函数,那么将使用基类的虚函数4) 只有派生类的虚函数遮蔽基类的虚函数(函数原型相同)才能构成多态(通过基类指针访问派生类函数)。例如基类虚函数的原型为virtual vo.
2022-03-31 14:05:31
877
原创 C++ 虚函数/纯虚函数/抽象类/接口
虚函数定义一个函数为虚函数,不代表函数为不被实现的函数;定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。class A{public: virtual void foo() { cout<<"A::foo() is called"<<endl; }};class B:public A{public: void foo() { cout<<"B::foo() is called"<<endl; }};int ma
2022-03-29 21:54:14
3310
原创 dll剖析--->导出类
前面介绍了怎么从DLL中导出函数和变量,实际上导出类的方法也是大同小异,废话就不多说了,下面给个简单例子示范一下,也就不多做解释了。DLL头文件:#ifndef_DLL_SAMPLE_H#define_DLL_SAMPLE_H//通过宏来控制是导入还是导出#ifdef_DLL_SAMPLE#defineDLL_SAMPLE_API__declspec(dllexport)#else#defineDLL_SAMPLE_API__declspec(dllimport)#...
2022-03-27 22:38:35
671
原创 dll剖析--->导出变量
声明为导出变量时,同样有两种方法:第一种是用__declspec进行导出声明#ifndef_DLL_SAMPLE_H#define_DLL_SAMPLE_H//如果定义了C++编译器,那么声明为C链接方式#ifdef__cplusplusextern"C"{#endif//通过宏来控制是导入还是导出#ifdef_DLL_SAMPLE#defineDLL_SAMPLE_API__declspec(dllexport)#else#defineDLL_SAMPL...
2022-03-27 22:33:47
449
原创 dll 剖析--->使用|查找|调试
当一个DLL被生成后,它创建了一个.dll文件和一个.lib文件;这两个都是你需要的。要使用DLL,就需要载入这个DLL。隐式链接这里有两个方法来载入一个DLL;一个方法是捷径另一个则相比要复杂些。捷径是只链接到你.lib 文件并将.dll文件置入你的新项目的路径中去。因此,创建一个新的空的Win32控制台项目并添加一个源文件。将你做的DLL放入你的新项目相同的目录下#include"stdafx.h"#include"DLLSample.h"#pragmacomment(lib,...
2022-03-27 22:27:47
2488
原创 dll 剖析--->创建
动态链接库(DLL)是从C语言函数库和Pascal库单元的概念发展而来的。所有的C语言标准库函数都存放在某一函数库中。在链接应用程序的过程中,链接器从库文件中拷贝程序调用的函数代码,并把这些函数代码添加到可执行文件中。这种方法同只把函数储存在已编译的OBJ文件中相比更有利于代码的重用。但随着Windows这样的多任务环境的出现,函数库的方法显得过于累赘。如果为了完成屏幕输出、消息处理、内存管理、对话框等操作,每个程序都不得不拥有自己的函数,那么Windows程序将变得非常庞大。Windows的发展要求允许同
2022-03-27 22:22:35
132
原创 C++ 工厂模式/抽象工厂剖析
正文在面向对象的编程中,一般通过继承和虚函数来提供抽象能力,多态让程序在执行期,调用者只需要看到父类类型,而不需要关心继承的子类类型。举个例子: 比如有个游戏,里面的游戏的活动对象为动物,比如有老虎和猫,会对主人公进行攻击。那么可能会实现为如下:代码如下:class Animal { public: virtual void Attack() = 0; }; class Tiger : public Animal { public: virtual void At..
2022-03-26 15:35:58
275
原创 刻骨铭心 的QT 线程死锁
直接上代码,直观明了。总结在此,避免再次踩坑。//1.锁的作用域过大引起的死锁////如果异常根源处的大括号不启用,调用stop()时,锁一直被占用,因为m_bRuning一直为true,死循环。此处等待m_bRuning为false;而根源相关处等待锁释放,才能将m_bruning置为false;一处等待m_bruning置为false;才能释放锁;一处等待锁释放,才能将m_bruning置为false; 相互等待,最终死锁!void StationBThread::stop(){.
2021-08-15 19:11:40
3211
原创 2020-10-11
抽象类的存在意义是什么?1、必须集成的属性方法用抽象方法, 非必需的用接口;2、接口是规范是协调与其它类的方法交互的一种协议准则;3、抽象方法必须是Public的;4、想要了解抽象类,只需记住抽象方法的应用场景就行了;5、抽象方法是定一种或者一类事物必须有的一种技能,但是这种技能的表现形式对于各个继承者的表现形式不一样,就把它定义为抽象方法。因为抽象方法必须存在抽象类,所以把普通父类定义为抽象类;6、为什么不定义为普通父类的virtual方法呢?因为普通父类的virtual方法子类不一定非要重
2020-10-11 16:57:39
83
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人