当我浏览Qt的源代码时,我没有发现它是如何实际绘制GUI组件的,但我知道它使用的是OpenGL。
我想知道像Qt这样的GUI库如何绘制其GUI组件(例如:QPushButton,QWidget)?
任何人都可以帮我一个基本的想法吗?
答案 0 :(得分:4)
在Qt项目网站:
Qt正在使用QPainter绘制QtWidgets,它使用(通常)光栅引擎来绘制内容。它没有使用本机OS调用,除了少数例外(文件对话框,例如,可以本地绘制或使用QtWidgets绘制)。
QtQuick是使用scenegraph绘制的,所以OpenGL。此外,此处没有本机操作系统调用。
我认为你或者误解了(计算中“本机”这个词的几个含义)stackoverflow帖子,或者你的信息来源是错误的。
好的,然后要明确:“本机”我的意思是使用本机操作系统控件,比如wxWidgets库:请求操作系统绘制本机滚动条或组合框等.Qt不会这样做。它描绘了所有小部件本身,并且只是试图模仿它运行的操作系统的外观。
但显然,某种本机操作系统调用正在深入内部,以便在屏幕上实际绘制一些像素,并打开本机窗口容器。但这对高级UI开发人员来说通常并不重要。
您可以清楚地选择是否应该由CPU或GPU绘制窗口小部件:窗口小部件可以使用不同的绘制方法(本机,栅格,OpenGL,更多信息请参见here![qt-project.org] ),并且用户可以选择应该使用哪一个。但是,大多数人不会使用它,因为默认设置效果很好。
感谢。