Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows上的Qt如何绘制?它调用GDI internal来绘图吗?_Qt_Gdi - Fatal编程技术网

Windows上的Qt如何绘制?它调用GDI internal来绘图吗?

Windows上的Qt如何绘制?它调用GDI internal来绘图吗?,qt,gdi,Qt,Gdi,我是Windows开发人员,对WinAPI程序有一些经验。 据我所知,在Windows上绘图有两种方法,调用GDI(包括GDI的包装器,如GDI+)来进行传统绘图,或者调用一些API,如DX或OpenGL来使用GPU进行绘图。 但是像Qt这样的东西是什么呢?Qt是否最终调用GDI来绘制一些东西?或者它只是有自己的方式直接画? 我只想知道它的一般原理。从外观上看,自从Qt4.0以来,他们改变了GDI的使用,并用其他一些可以提高可移植性的内部构件替换它。如果您愿意,QT是开源的,因此您可以查看代码来

我是Windows开发人员,对WinAPI程序有一些经验。 据我所知,在Windows上绘图有两种方法,调用GDI(包括GDI的包装器,如GDI+)来进行传统绘图,或者调用一些API,如DX或OpenGL来使用GPU进行绘图。 但是像Qt这样的东西是什么呢?Qt是否最终调用GDI来绘制一些东西?或者它只是有自己的方式直接画?
我只想知道它的一般原理。

从外观上看,自从Qt4.0以来,他们改变了GDI的使用,并用其他一些可以提高可移植性的内部构件替换它。如果您愿意,QT是开源的,因此您可以查看代码来了解QTGUI.dll内部构件

在实践中我不知道这一点,但目前的答案似乎是可靠的

更新:此页面似乎更准确:

Windows上的Qt 5可以配置为使用OpenGL驱动程序或 DirectX驱动程序通过角度库。你想要什么取决于 您的用例。Qt项目为这两个方面提供了二进制安装程序 变体。OpenGL

OpenGL(开放图形库)是一种广泛应用的行业标准 [opengl.org]用于渲染二维和三维计算机图形。这是最重要的 Mac上硬件加速图形操作的事实标准 OS X、Linux和大多数嵌入式平台

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

Qt5中的QtQuick2堆栈基于OpenGL,需要OpenGL 3.0(或者带有framebuffer_对象扩展的OpenGL 2.x)或更高版本或OpenGL ES 2.0。Qt OpenGL模块[Qt project.org] 需要OpenGL 1.3或更高版本。Windows上的OpenGL

尽管Microsoft Windows从相当长的一段时间以来就对OpenGL提供了本机支持 有时,支持的标准版本(版本1没有任何 安装的驱动程序)对于Qt来说太有限。较新的版本是 通常通过自定义图形驱动程序提供,但需要用户 安装它们。此外,OpenGL支持的质量也受到了一定的影响 缺乏司机。角度项目

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

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

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

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

进一步阅读


Qt小部件使用自定义软件渲染器(自定义光栅引擎)——看起来它不是GDI

每个小部件都继承自
QPaintDevice
您可以检查绘画设备的类型:

QtQuick似乎在使用/pure OpenGL-

什么是“内部构件”?你说的是“可移植性”,但我认为它必须有一个特定于Windows平台的实现。谢谢