前两天刚好跟同学提起如何实现一个 Timer 。提到了 Kafka 的时间轮和 Go 语言的四叉堆实现。所以就看了下 .NET 是如何实现 Timer 的。
想起之前在公司做的关于 HighDPI 的适配,在 Qt4 下可以说是比较繁琐,代码敲到手疼。早就听说 Qt5.6 开始支持了 HighDPI ,一直没机会看详细的代码。一直到开始做 Gal ,才刚好在 Qt5 下需要 HighDPI 支持。用过之后,真的感叹,用起来太方便了。故看了一下详细实现。不过比较遗憾的是代码中有一个小瑕疵。
之前写了一篇 浅谈Qt控件绘制 。之所以叫浅谈是因为调用都是比较表层的调用。其实 Qt 的绘制,可以说用 Qt 的人都有用到,但是对于绘制底层,了解的人并不见得很多。我其实之前也是云山雾罩,从来没有深究过。所以想着知其然还是要知其所以然。
在工作中经常要根据 UI 提供的稿子做自绘控件,而且在新项目中,我自己基于 Qt 做了一套项目自用控件库,还会涉及到换肤,所以对 Qt 的控件绘制,着重的研究了一下。看过代码之后,觉得 Qt 项目本身,确实是做 UI 发家,绘制流程清晰,可以说是做界面的范本了。将流程梳理记录一下。
在公司曾经做有关图片的一个新项目。当时仔细研究了一下QImage
的源码,将一些碎片化的东西记录在了某个平台上,如今翻出来了,感觉这些内容还可以再细化细化,有时间的话,详细整理,先将以前的碎片在此记录下来。
标题是非常的哗众取宠了。这里主要是用来记录一些使用 Qt 的小经验。之前在工作中,会有一些关于 Qt 的经验总结,加之平时自己写一些小东西也有使用 Qt ,所以使用起来会有一些经验教训,聚集起来,姑且叫做 Effective Qt 了。随时想到会随时更新内容。(注:这里会有一些代码设计的思路,不存在绝对的正误,只是一种习惯)
工作中有幸做过关于 Qt5 Json 模块向 Qt4 的移植。做过有关 Qt Json 与 JsonCpp 的对比,并做过相关的兼容工作。所以着重研究了一下有关 Json 解析器的相关内容。注:大家常说的 QJson 其实并不是 Qt 中的模块,而是在 Qt4 没有 Json 模块的年代,一个非官方的第三方模块。对于现在 Qt 中的 Json 模块,官方称之为 Qt Json。
关于 QTimer 的具体实现,翻看源码源于一次面试经历。被问到 QTimer 的问题,我随口说了一句:Windows 平台下是用 Windows API 实现的,然后便引起了怀疑,不过我据理力争,便也作罢。所以回来之后,就又确认了一下。
经常写 Qt 的程序,就会发现,不管是写控制台程序还是带窗体的应用程序,在 Qt 中的入口都是int main()
。但实际上抛开其他平台不说,就是在 Windows 平台上,二者的入口就是有区别的。之前只是略知一点,今天翻看了一下代码,算是了解了一下。
上次研究了一下Qt是如何对Win32初始化程序进行包装的。这次研究下Qt的事件循环和Windows消息循环之间的联系。
上次说到QApplication
注册了一个qt_internal_proc
方法来处理消息循环,但是在这个方法中并没有看到一些关于Qt事件的蛛丝马迹。例如鼠标事件、键盘事件等。