版权声明
本文为原创作品,请尊重作者的劳动成果。转载必须保持文章完整性,并以超链接形式注明原始作者“ tingsking18 ”和 主站点 地址,方便其他朋友提问和指正。
QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数
QT源码解析(二)深入剖析QT元对象系统和信号槽机制
QT源码解析(三)深入剖析QT元对象系统和信号槽机制(续)
QT源码解析(四)剖析Qt的事件机制原理
QT源码解析(五)QLibrary跨平台调用动态库的实现
QT源码解析(六)Qt信号槽机制与事件机制的联系
QT源码解析(七)Qt创建窗体的过程
QT源码解析(八)Qt是如何处理windows消息的
QT源码解析(九)解析QDateTime
前言:分析Qt的代码也有一段时间了,以前在进行QT源码解析的时候总是使用ue,一个函数名在QTDIR/src目录下反复的查找,然后分析函数之间的调用关系,效率实在是太低了,最近总结出一个更简便的方法,就是利用Qt Creator这个IDE。
带来的好处是:
1. Qt Creator可以很方便的跟踪代码的调用,这样大大提高了分析代码的速度。
2. 函数间的调用关系能更加直观的找到。
3. 便于对代码的纵向关系的把握。
带来的坏处:
1. 只是展现了调用到的函数或者类的关系。
2. 缺少对类、某一组类、函数间关系的整体把握。
上面总结一下自己在QT源码解析时候用到的方法,下面开始步入正题。Qt创建窗体的过程,由于我对linux不是很熟悉,下面我所有的分析都是基于windows下的。
关于windows下利用API创建窗体。我这里就不多解释了,直接给出代码,然后结合下面的代码来分析一下Qt创建窗体的过程。
详细的解释请参考:
John Chen大牛的博文:WIN32 SDK界面编程
先写一个最简单的Qt程序:
来分析一下这个窗体程序是如何创建的。
首先关于main函数和winmain函数,为什么Qt的窗口程序是用main函数而非winmain,在我的另外一篇博文中有解释:QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数 这里不再解释
Windows窗体创建一定会调用RegisterClass这个函数的,我们在QTDIR/src里面搜索一下,有两个文件有这个函数一个是qapplication_win.cpp另外一个是qeventdispatcher_win.cpp,两个的作用不同,这次我们先研究qapplication_win.cpp中的RegisterClass函数,因为这个是与窗体创建有关的,下一篇QT源码解析(八)Qt是如何处理windows消息的 将会介绍qeventdispatcher_win.cpp中的RegisterClass的作用。
我们先将断点设置在qapplication_win.cpp中的 qt_reg_winclass 函数里,然后开始调试,运行到断点,然后我们看一下call stack如下图:
![](http://hi.csdn.net/attachment/201004/26/0_1272267874hmBZ.gif)
下面红色的框中为Call stack,我们可以看到函数调用的顺序,真正的创建QPushButton是在show()方法中,show()方法又调用了setVisible方法…… ……
QtWndProc就是窗体的回调函数,在RegisterClass的时候传给WNDCLASS结构的,QtWndProc同上面的API创建窗体的函数WndProc。
我们看一下QtWndProc的代码,也是一个switch (message) 然后一堆case来处理消息,最后也是调用DefWindowProc将不归他处理的消息交还给系统。
分享到:
相关推荐
在本文中,我们将深入探讨如何使用Qt框架创建一个折叠菜单,这是基于提供的资源"Qt做的折叠菜单,新手必备.rar"。这个压缩包包含了QtNavListView的源码,它是一个适用于新手学习和实际项目中的折叠菜单界面。让我们...
本次项目是基于Qt环境进行开发设计一个基于嵌入式QT的车载影音系统应用,通过交叉编译Qt程序,并在GEC6818开发板上运行,主要通过Qt基础控件、多窗体、样式表、Qt多进程、Http请求、API接口调用、JSON数据解析、...
QT开发的学习总结主要涵盖Qt框架的历史、不同版本的解析以及嵌入式环境的安装与配置。Qt是由Trolltech公司创建的,后被诺基亚收购,成为诺基亚Qt Development Frameworks的一部分,如今它是一个广泛应用的跨平台开发...
计算过程通常涉及到对输入的解析,将字符串转换为数值,然后执行相应的数学运算。这里可以使用`QString`的`toDouble()`方法转换字符串,使用标准C++库的`std::vector`存储运算符和操作数,最后根据运算优先级计算...
Qt是一个流行的C++图形用户界面库,它提供了丰富的功能来创建桌面应用。而Visual Studio的解决方案窗口是开发者管理项目和文件的主要工具。我们将在Qt中模拟这一功能,以提高开发效率。 首先,我们需要了解Qt中的...
通过详细讲解游戏的构建过程,帮助读者掌握Qt的基本操作及游戏逻辑设计。本教程分为三个主要部分:简介、功能展示与游戏分析。 #### 二、简介 ##### 2.1 开发环境准备 在开始编写游戏之前,需要确保安装了Qt 4.6 ...
8. **源码解析**: "FoldingForm.sln"是一个Visual Studio解决方案文件,包含了项目的所有配置和依赖项,而"FoldingForm"可能是项目的主要源代码文件。通过阅读和分析这些源码,可以进一步理解实现折页效果的具体步骤...
本次项目是基于Qt环境进行开发设计一个基于嵌入式QT的车载影音系统应用,通过交叉编译Qt程序,并在GEC6818开发板上运行,主要通过Qt基础控件、多窗体、样式表、Qt多进程、Http请求、API接口调用、JSON数据解析、...
虽然Visual Studio 2017中也集成了Qt插件,但由于与Qt自带的项目管理机制有所不同,因此更倾向于使用Qt Creator来创建项目,以便更好地利用其内置的pro文件和自动配置功能,减少手动设置的工作量。 ##### 2.2 ...
QQ窗体的实现是一个涉及到计算机图形用户界面(GUI)设计...以上是对"QQ窗体实现"这一主题的详细解析,涵盖了多个IT领域的关键知识点,展示了软件开发过程中涉及的复杂性和多样性。希望这个解释能为你提供宝贵的参考。
课程设计-基于QT开发的天气预报软件设计与实现C++源码+项目说明.zip 【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 【2】...
【标题】"写字板源码"的解析与学习 在编程领域,特别是在Visual Basic (VB) 开发中,"写字板源码"是指一个用VB编写的类似Windows写字板的应用程序源代码。VB是一种面向对象的编程语言,常用于开发桌面应用程序,其...
- **源码分析**:对Qt对话框的源代码进行详细解析。 - **进一步学习信号和槽**:深化理解信号和槽的概念及其在实际应用中的作用。 - **Qt的Meta-Object系统**:介绍Qt的元对象系统及其如何支持信号和槽机制。 - ...
在这个例子中,我们创建了一个`Form1`窗体,其中包括一个文本框`tbData`用于显示接收到的数据。在窗体加载时,我们焦点放在`tbID`上,表示用户需要输入串口号。`btENT_Click`事件处理函数负责初始化串口并开启监听,...
3. **创建浏览器窗口**:通过CEFSharp提供的接口,创建一个新的浏览器实例,指定父控件(通常是窗体或用户控件)和初始URL。 4. **处理导航事件**:你可以注册事件处理器,监听浏览器的导航事件,如加载开始、加载...
以下将详细解析这个工程中可能涉及的IT知识点: 1. **编程语言**:推箱子游戏的源代码通常会使用一种或多种编程语言实现,可能是C++、Java、Python、C#等。考虑到工程的完整性和可运行性,这里最有可能是使用具有...
《公司会员管理系统易语言源码解析》 在IT行业中,软件开发是一项至关重要的工作,而源码则是软件的灵魂。本文将深入探讨一个基于易语言编写的“公司会员管理系统”源码,帮助读者理解其核心机制和设计思路。易语言...