- 博客(26)
- 收藏
- 关注
原创 读QT5.7源码(七)QObjectData 和 QObjectPrivate
在QObject中定义了一个保护权限的成员变量 d_ptrprotected: QScopedPointer d_ptr;QScopePointerQObject 几乎是所有QT中的类的基类,因此QT中每个继承于Qobject的类都有这个指针,指向一个动态分配的QObjectData对象。QObjectData类的定义class Q_CORE_E
2017-02-23 00:57:03 4010
原创 读QT5.7源码(六)QMetaClassInfo 和 QMetaProperty
ClassInfo 和 Property在源码中的定义:MOC生成的字符串结构MOC生成的uini数组结构
2017-02-22 00:04:59 1839
原创 读QT5.7源码(五)QMetaEnum
Enum在QMetaObject中的分布:QMetaEnum 类用来管理对应的enum结构,方面查询等操作,下面是它的定义class Q_CORE_EXPORT QMetaEnum{public: Q_DECL_CONSTEXPR inline QMetaEnum() : mobj(Q_NULLPTR), handle(0) {} const
2017-02-21 23:45:50 1606
原创 读QT5.7源码(四)QMetaMethod 和 QMetaMethodPrivate
QMetaMethod 和 QMetaMethodPrivate 是用来管理QMetaObject包含信息中的函数节的。MOC生成的函数结构图如下首先是字符串结构函数结构图:每个函数节 占5个int ,第一个是函数名字符串,在字符串数组中的索引值为3,刚好对应字符数组中的“Te
2017-02-21 18:23:38 2907 1
原创 读QT5.7源码(七)QMetaObjectPrivate
QMetaObjectPrivate 提供了对QMetaObject类成员中 uint类型数组的管理,这是个复杂的结构,因此QMetaObjectPrivate提供了结构的定义和操作函数,来方便对其的管理工作。添加了 classInfo method emum property 后MOC生成的 QMetaObject.data 节类的声明:class Wid
2017-02-21 04:49:25 1009
原创 读QT5.7源码(三)Q_OBJECT 和QMetaObject
Qt meta-object系统基于三个方面: 1、QObject提供一个基类,方便派生类使用meta-object系统的功能; 2、Q_OBJECT宏,在类的声明体内激活meta-object功能,比如动态属性、信号、槽; 3、Meta Object编译器(MOC),为每个QObject派生类生成代码,以支持meta-object功能。QObject定义了从一个
2017-02-21 01:13:06 4268
原创 读QT5.7源码(二)QByteArray
QByteArray 以QTypeArrayData做底层做了聚合,实现了对字节为单位的数组的管理。QT中是这样描述它的QByteArray can be used to store both raw bytes (including '\0's) and traditional 8-bit '\0'-terminated strings. Using QByteArr
2017-02-20 01:08:39 6178
原创 读QT5.7源码(一)QArrayData QTypedArrayData
QArrayData QTypedArrayData这两个类是配套的,后者是以前者为基础的类模板,以方便对不同类型的数组提供抽象管理。他们被定义下同一个头文件和源文件中,分别是QarraryData.h 和 QarraryData.cpp 位于qtcode文件夹中QArrayData定义如下struct Q_CORE_EXPORT QArrayData{ QtPri
2017-02-19 23:32:15 7431
转载 关于qt中的tr()函数
在论坛中漂,经常遇到有人遇到tr相关的问题。用tr的有两类人:(1)因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr(2)另一类人,确实是出于国际化的需要,将需要在界面上显示的文件都用tr包起来,这有分两种:(2a) 用tr包住英文(最最推荐的用法,源码英文,然后提供英文到其他语言的翻译包)(2b) 用tr包住中文(源码用中文,然后提供中文到其他语言的翻
2017-02-19 21:20:42 2273
原创 QT信号和槽机制分析
QObject这个class是QT对象模型的核心,绝大部分的 QT 类都是从这个类继承而来。这个模型的中心特征就是一个叫做信号和槽(signal and slot)的机制来实现对象间的通讯,你可以把一个信号和另一个槽通过 connect(„) 方法连接起来,并可以使用disconnect(„) 方法来断开这种连接,你还可以通过调用blockSignal(„) 这个方法来临时的阻塞信号.
2017-02-16 18:23:05 2603
转载 Windows核心编程笔记(二十一) 硬件输入模型和局部输入状态
28.1 原始输入线程(RIT)(1)图解硬件输入模型 ①当操作系统初始化时会创建一个原始输入线程(RIT)和系统硬件消息队列(SHIQ),这两者是系统硬件输入模型的核心。当SHIQ队列有硬件(如鼠标或键盘)消息时,RIT被唤醒,并将事件添加到用户线程的VIQ队列。 ②任何时刻,只能有一个用户线程与RIT连接,该线程被称为前景线程。相对于其他线程创建的窗口,前
2017-02-13 20:38:55 1675
转载 Windows核心编程笔记(二十) 窗口与消息2
唤醒一个线程线程的挂起与唤醒(1)当线程调用GetMessage或WaitMessage,而消息队列中又没有消息出现时,线程会被挂起。(2)当消息被“Post”(也可以是线程间的“Send”)到消息队列时,相应的Wake标志位会被设置,以表明该线程可被调度。 查询队列的状态:DWORD GetQueueStatus(UINT fuFlags)(1)fuFla
2017-02-13 20:20:49 2276
转载 Windows核心编程笔记(二十) 窗口与消息
线程的消息队列(1)Windows用户对象(User Object) ①类型:图标、光标、窗口类、菜单、加速键表等 ②当一个线程创建某个对象时,则该对象归这个线程的进程所有,当进程结束时,如果用户没有明确删除这个对象,则操作系统会自动删除这个对象。 ③窗口和钩子(hook)这两种用户对象,它们分别由建立窗口和安装钩子的线程所拥有(注意,不是进程)。如果一个线程
2017-02-13 19:50:43 1640
转载 Windows核心编程笔记(十九) SEH结构化异常处理_未处理异常及向量化异常
UnhandledExceptionFilter函数详解 BaseProcessStart伪代码(Kernel32内部)void BaseProcessStart(PVOID lpfnEntryPoint) //参数为线程函数的入口地址{ DWORD retValue; DWORD currentESP; DWORD exceptionCode;
2017-02-13 19:49:11 3504
转载 c++11新特性--Lambda
生成随机数字 假设我们有一个vector容器,想用100以内的随机数初始化它,其中一个办法是通过generate函数生成,如代码1所示。generate函数接受三个参数,前两个参数指定容器的起止位置,后一个参数指定生成逻辑,这个逻辑正是通过Lambda来表达的。代码 1 我们现在看到Lambda是最简形式,只包含捕获子句和函数体两个必要部分,其他
2017-02-09 19:42:06 239
转载 c++11新特性--static_assert
static_assert:这个宏用于检测和诊断编译时错误。编译期,这是一个与 CRT-assert(运行时宏)相反的宏。这个好东西用于检测编译时程序的不变量。这需要一个表达式可以被计算为 bool 或 string (字符串)。如果这个表达式的值为 false ,那么编译器会出现一个包含特定字符串的错误,同时编译失败。如果为 true 那么没有任何影响。我们可以在以下使用
2017-02-09 19:38:31 3471
转载 c++11新特性--decltype
返回值 decltype(表达式)[返回值的类型是表达式参数的类型]这个可也用来决定表达式的类型,就像Bjarne暗示的一样,如果我们需要去初始化某种类型的变量,auto是最简单的选择,但是如果我们所需的类型不是一个变量,例如返回值这时我们可也试一下decltype。现在我们回看一些例子我们先前做过的,[cpp] view
2017-02-09 19:36:54 369
转载 【C++11】新特性——auto的使用
[+] C++11中引入的auto主要有两种用途:自动类型推断和返回值占位。auto在C++98中的标识临时变量的语义,由于使用极少且多余,在C++11中已被删除。前后两个标准的auto,完全是两个概念。1. 自动类型推断 auto自动类型推断,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推断,可以大大简化我们的编程工作。下面是一些使用a
2017-02-09 19:36:13 454
转载 Windows核心编程笔记(十八) SEH结构化异常 三
23.3 终止处理程序23.3.1 程序的结构(1)框架__try{ //被保护的代码块 ……}__finally{ //终止处理}(2)__try/__finally的特点 ①finally块总是保证,无论__try块中的代码有无异常,finally块总是被调用执行。 ②try块后面只能跟一个
2017-02-08 19:47:06 457
转载 Windows核心编程笔记(十八) SEH结构化异常 二
23.2 编译器层面对系统SEH机制的封装23.2.1 扩展的EXCEPTION_REGISTRATION级相关结构:VC_EXCEPTION_REGISTRATION(1)VC_EXCEPTION_REGISTRATION结构 struct VC_EXCEPTION_REGISTRATION{ VC_EXCEPTION_REGISTRATION* prev
2017-02-08 19:45:04 706
转载 Windows核心编程笔记(十八) SEH结构化异常 一
23.1 基础知识23.1.1 Windows下的软件异常(1)中断和异常 ①中断是由外部硬件设备或异步事件产生的 ②异常是由内部事件产生的,可分为故障、陷阱和终止三类。(2)两种异常处理机制:SEH和VEH(WindowsXP以上新引进)(3)结构化异常处理(SEH)是Windows操作系统提供的强大异常处理功能。而Visual C++中的__
2017-02-08 17:59:06 1606
转载 Windows核心编程笔记(十七) 线程局部储存
21.1 动态TLS21.1.1 为什么要使用线程局部存储 编写多线程程序的时候都希望存储一些线程私有的数据,我们知道,属于每个线程私有的数据包括线程的栈和当前的寄存器,但是这两种存储都是非常不可靠的,栈会在每个函数退出和进入的时候被改变,而寄存器更是少得可怜。假设我们要在线程中使用一个全局变量,但希望这个全局变量是线程私有的,而不是所有线程共享的,该怎么办呢?这时候就须要用到线
2017-02-07 23:43:41 3348
转载 Windows核心编程笔记(十七) DLL高级技术
20.1 DLL模块的显式载入和符号链接20.1.1 显式载入DLL模块(1)构建DLL时,如果至少导出一个函数/变量,那么链接器会同时生成一个.lib文件,但这个文件只是在隐式链接DLL时使用(显示链接时并没有用到这文件)(2)显式载入DLL的函数:LoadLibrary(Ex) 参数含义pCTSTR pszDll
2017-02-07 23:41:55 2499
转载 Windows核心编程笔记(十七) 堆
1.堆 虚拟内存主要用于分配连续的内存,如给大数组分配内存。 堆主要用于分配小块内存,如链表,树等就适合用堆来分配内存。 优点在于:在堆中分配内存时不像虚拟内存要求那么多,如分配粒度、页边界等。它没有这些要求,可分配任意大小的内存。 缺点在于:相对于其它内
2017-02-07 11:36:36 396
原创 Windows核心编程笔记(十六)内存映射文件
原理首先,“映射”这个词,就和数学课上说的“一一映射”是一个意思,就是建立一种一一对应关系,在这里主要是只 硬盘上文件 的位置与进程 逻辑地址空间中 一块大小相同的区域之间的一一对应,如图1中过程1所示。这种对应关系纯属是逻辑上的概念,物理上是不存在的,原因是进程的逻辑地址空间本身就是不存在 的。在内存映射的过程中,并没有实际的数据拷贝,文件没有被载入内存,只是逻辑上被放入了内存,
2017-02-06 16:05:51 442
原创 Windows核心编程笔记(十五)应用程序中使用虚拟内存
windows 提供了三种机制来对内存进行操作1)虚拟内存,最适合用来管理大型对象数组 或大型结构数组2)内存映射文件,最适合用来管理大型数据流(通常是文件),以及在同一机器上运行的多进程之间共享数据。3)堆,适合用来管理大量的小型对象。windows提供了一些用来操控虚拟内存的函数,我们可以通过这些函数直接预定地址空间区域,给区
2017-02-05 17:09:08 508
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人