Qt的GUI内部 – 小部件绘画?

我一直在使用QT一段时间,我一直在想关于在Windows中绘制GUI的方式。
是真的使用QPainter自己绘制所有的button,编辑框,combobox,checkbox,选项卡等“,或者是以某种方式使用本机窗口小部件吗?

事实上,它可以做自定义样式和皮肤表明它确实使用QPainter绘制所有的东西,但是如何维护这种types的代码呢? Qt开发人员是否真正对窗口系统的整个function进行反向工程? 是不是有点浪费?
另一个证据是,如果我在Qt gui上使用Spy ++,那么所有的窗口都显示一个类名为“QWidget”的窗口。 如果它使用的是原生的部件不应该是“button”,“静态”等“?

在其他平台上呢? 它在Max OSX中也一样吗?

在Windows XP和Vista上(显示设置设置为Classic时除外),通过QWindowsXPStyle和QWindowsVistaStyle实现的小部件绘画实际上使用底层特定于主题的绘图(uxtheme.dll),以便例如按钮看起来像本机一样。 在较旧版本的Windows上,Qt通过QWindowsStyle模拟小部件绘画。

在Mac OS X上,情况类似, QMacStyle依赖于外观管理器来委派小部件的低级绘画。

对于X11,Qt通常使用自己的风格绘画,并且具有某些模仿某个窗口系统的风格,例如QMotifStyle与Motif没有实际加载的相似外观,并且依赖于Motif环境。 然而,在GNOME下运行时,Qt可以通过QGtkStyle使用本地的Gtk +主题。

QWindowsXPStyle文档有这样的说法:

“警告:这种风格只适用于Windows XP平台,因为它使用了Windows XP的风格引擎。”

Qt维基百科页面有这样的说法:

“使用本地UI呈现API

Qt用来模拟其预期平台的本地外观,偶尔会导致在仿真不完善的情况下略有差异。 Qt的最新版本使用不同平台的本地API来绘制Qt控件,因此不会遇到这样的问题[24]。 (另请参阅wxWidgets,其中大多数小部件功能使用本机API。)“

Qt的确能够绘制所有的小部件(无论是使用平台主题API还是“原始的”GDI / X /等都不重要)。 如果它使用了原生的小部件(比如wxWindows),那么即使是最细微的部分,也几乎不可能挂钩到样式,更不用说使用现成的小部件来添加自定义功能了。