Windows上的Qt如何绘制?它是否称为GDI内部绘制?

时间:2013-05-21 06:52:46

标签: qt gdi

我是Windows上的开发人员,我在WinAPI程序方面有一些经验。 据我所知,有两种方法可以在Windows上绘制,调用GDI(包括GDI的包装器,如GDI +)来做传统绘图或调用DX或OpenGL等一些API来绘制使用GPU。 但是像Qt这样的其他东西是什么? Qt最终是否会给GDI打电话?或者它只是有自己的直接绘制方式? 我只是想了解它的理论。

3 个答案:

答案 0 :(得分:0)

从它的外观来看,自从QT 4.0以来,他们已经改变了GDI的使用并将其替换为可能提高可移植性的其他一些内部构件,如果你愿意,QT是开源的,所以你可以查看代码来理解QTGUI .dll内部。

答案 1 :(得分:0)

Qt小部件使用自定义软件渲染器(自定义栅格引擎)-从表面上看它不是GDI。

https://doc.qt.io/qt-5/topics-graphics.html

每个小部件都继承自QPaintDevice,您可以检查绘画设备的类型:https://doc.qt.io/qt-5/qpaintengine.html#Type-enum

QtQuick似乎正在使用ANGLE (will convert ogl calls to d3d on windows) /纯OpenGL-https://blog.qt.io/blog/2017/01/18/opengl-implementation-qt-quick-app-using-today/

答案 2 :(得分:-3)

我在实践中并不知道这一点,但http://qt-project.org/forums/viewthread/33565的答案似乎可靠。

更新:此页面似乎更准确:http://qt-project.org/wiki/Qt-5-on-Windows-ANGLE-and-OpenGL

  

Windows上的Qt 5可以配置为使用OpenGL驱动程序,或   DirectX驱动程序通过ANGLE库。你想要什么取决于   你的用例。 Qt项目为两者提供二进制安装程序   变种。 OpenGL的

     

OpenGL(开放图形库)是一个广泛的行业标准   [opengl.org]用于渲染2D和3D计算机图形。就是这样   Mac上硬件加速图形操作的事实标准   OS X,Linux和大多数嵌入式平台。

     

OpenGL ES 2.0(嵌​​入式系统开放图形库)是一个   用于嵌入式系统的精简版OpenGL,即   缺少一些功能。

     

Qt 5中的Qt Quick 2堆栈基于OpenGL,需要OpenGL   3.0(或带有framebuffer_object扩展的OpenGL 2.x)或更高版本或OpenGL ES 2.0。 Qt OpenGL模块[qt-project.org]   需要OpenGL 1.3或更高版本。 Windows上的OpenGL

     

虽然Microsoft Windows本身就支持OpenGL   一段时间,支持的标准版本(版本1没有任何   安装的驱动程序)对Qt来说太有限了。较新的版本   通常通过自定义图形驱动程序提供,但需要用户   安装它们。另外,一些人支持OpenGL的质量   司机缺乏。 ANGLE项目

     

ANGLE(几乎是原生图形层引擎)是一个开源项目   [code.google.com]由Google提供。其目的是映射OpenGL ES 2.0 API调用   到DirectX 9 API。它的定期更新版本是qtbase的一部分   [qt.gitorious.org]。

     

要使用ANGLE编译Qt,您必须拥有Direct X SDK   [msdn.microsoft.com]已安装。从Windows Kit 8开始,这是   包含在Windows SDK中。

     

如果您的应用程序使用了ANGLE,则应该发货   d3dcompiler_XX.dll以及Qt库。版本字符串   D3D着色器编译器是从DirectX SDK头中提取的,所以make   一定要获得与ANGLE相同的版本(例如_43或   _46)。如果使用-angle-d3d11配置Qt,这一点变得尤为重要。建议如果您的应用程序使用的OpenGL调用不是OpenGL ES 2.0的一部分,则使用Desktop OpenGL您的应用程序不会   完全使用OpenGL(因为ANGLE意味着额外的部署   那些不需要的依赖项)。您的应用程序需要运行   在Windows XP上。尽管使用ANGLE作为替代品很诱人   对于此平台上缺少图形驱动程序,它不能完全正常工作   并且可能导致崩溃,例如,当安全对话框出现时   打开。

     

如果您需要OpenGL ES功能,请使用ANGLE,但不是完整的OpenGL   具有不同Windows版本的异构用户群图像   您不希望您的用户必须安装最近的图形   卡驱动程序您想使用的视频播放功能   QtMultimedia(见QTBUG-31800 [bugreports.qt-project.org])你的   应用程序需要运行Windows远程桌面协议(请参阅   OpenGL和远程桌面[social.technet.microsoft.com])

     

进一步阅读

     

http://qt-project.org/doc/qt-5.1/qtdoc/requirements-win.html   http://qt-project.org/doc/qt-5.1/qtopengl/qtopengl-index.html   http://blog.qt.digia.com/blog/2012/10/24/graphics-on-windows-from-a-different-angle/   http://blogs.msdn.com/b/chuckw/archive/2012/05/07/hlsl-fxc-and-d3dcompile.aspx