我对QT用于显示文本的WinApi函数感兴趣(在按钮等上)
任何输入都会被贬低。
编辑: 我对使用的特定功能感兴趣,即它们的名称。假设我们有一个带文本集的QLabel,现在,最后会调用gdi / user32函数来获取文本。
答案 0 :(得分:3)
Spy ++没有看到任何子窗口的原因是因为您看到的窗口实际上是一个大窗口而Qt在按钮中绘制。所以你看到的这些按钮没有自己的HWND
。 Qt碰巧也实现了某种事件系统,这样当你“点击”“按钮”时它会做一些事情。它们就是我们所说的“轻量级”控件或"windowless" controls。
这与Internet Explorer和Firefox的工作方式相同。您在网页上看到的按钮由渲染引擎绘制,浏览器模拟按钮点击。
因此,了解Qt如何工作实际上是了解Windows API如何工作的一种非常糟糕的方式。与Windows API接口的代码深埋在源代码中。 Qt是一个跨平台的框架,因此它无法在公共接口中公开Windows API。
如果您想开始使用Windows API you can start with this tutorial。它将展示如何创建窗口,按钮等,只需逐步创建C ++和Windows API。
请注意,Windows API不是GUI工具包(即使每个人都认为它是)。它是操作系统本身的低级应用程序接口,提供所需的原语(例如文件,窗口,线程,网络等)来实现您的应用程序。这就是为什么你会看到许多人使用框架或库(如Qt,FLTK,WxWidgets等)或自己编写的。
答案 1 :(得分:0)
Qt仅在创建顶级窗口或任何真实Windows(例如CreateWindowEx
或Qt::Window
标志集)时才使用Qt::Tool
。
其余的是模仿的。 Qt正在从Windows上的UxTheme获取位图,并使用它自己的例程 - 事件,消息,事件循环,渲染。
你看到的这些魔法 - 带有3d效果的原生窗口......它们实际上是非原生的,它们只是LOOK原生的。它们是UxTheme的位图转换为OpenGL纹理(或Direct3D纹理)并使用GPU渲染。
有时Qt CALLS TextOut
,但并非总是如此。例如,自己的字体渲染发生在QGLWidgets中或者如果设置了GraphicsEffect。
所以你的答案是:去检查来源。 QT呈现一切的方式很有趣,但不依赖于像GDI TextOut这样的API函数。
用Windows的方式挂钩Qt应用程序是非常困难的。