GUI框架实际上是如何开发的?

4
我主要从事web开发,但偶尔也会进行一些C/C++或Java编程。我非常好奇这些框架如何实际生成其GUI中使用的图形。GUI元素(标题栏、窗口框架、状态栏、按钮等)是由设计师在Photoshop中设计,然后开发人员将该图形添加到框架中吗?还是开发人员根据设计师的指导以程序方式构建元素?如果有人能给我一个概述那就太棒了!
2个回答

3

非常好的问题,Lark!由于我们在Qt框架分支中,我将告诉您如何在Qt中完成此操作,但我相信您可以应用于类似的框架或库,如GTK等。

因此,Qt启动了一个框架,为各种平台提供一个API,使得轻松移植应用程序从一个平台到另一个平台,同时在这些平台上提供本地的外观和感觉。例如,在MacOSX上,按钮会有蓝色的Aqua风格,而在Windows XP上,它看起来像Windows平台上的按钮。 Trolltech花费了很多精力,并在使GUI看起来本地方面做了出色的工作。那么它是如何工作的?嗯,所有Qt小部件都使用QStyle及其派生来呈现自己。根据样式,小部件的外观会有所不同。所有标准小部件都遵循它们设计的平台的指南。可能会有一些小的图形设计工作,但我认为它并不重要。外观和感觉的主要来源是描述这些平台上UI元素应该如何看起来及其行为的平台指南。

但是Qt的发展非常迅速,巨魔们带来了一种非常有前途的技术,称为Qt Quick。这是一项令人惊叹的技术,允许设计师和开发人员紧密地合作,提供最佳的用户界面。它高度依赖于在代码中使用Photoshop、GIMP或类似工具制作的艺术品。使用Qt Quick比使用C++/Qt更容易使用设计师的模型,因为Qt Quick最初就是为此而设计的。

希望这可以帮助到您


谢谢Barbaris!那么Qt框架实际上是绘制元素而不是拉入图形文件(.jpg,.png等)吗? - Lark
1
是的,它使用QPainter进行渲染,而QPainter又调用平台相关的原始函数(如drawRect)来渲染每个UI元素的部分。虽然如我所说,使用Qt Quick,您可以利用开发人员和设计师的合作,通过使用艺术品替换大多数使用API进行的绘制方法。 - Barbaris
1
我不相信在任何平台上,“drawRect”的结果在视觉上有所不同。它将是一个线宽为X,颜色为Y,尺寸为AxB的矩形。Qt使用这些API来渲染其小部件,并集成QStyle API以为开发人员提供改变元素外观的细节提供优势。 - Barbaris
Barbaris,非常感谢你的帮助!你的答案和评论让我更好地理解了问题。我还找到了这个不错的小维基页面,它进一步阐明了问题:http://wiki.osdev.org/GUI - Lark
应该提到,QT的方式是一条死路。在MacOSX和Windows7上,主题API已经被大量弃用,甚至以前从未起作用过。QT应用程序看起来与本地应用程序完全不同。对于更复杂的GUI(例如动画),也无法遵循这种方式。世界属于本地操作系统供应商和类似WxWidget的工具包。 - Lothar
显示剩余2条评论

1
大多数GUI框架的基本低级功能非常古老,是早期开发人员在原始环境下进行的艰苦工作的结果 - 在终端屏幕上绘制图形等等,使用C或汇编语言进行非常低级别的操作。慢慢地,用于抽象这些过程的库以及用于细化和组织它们的框架和类层次结构开始出现。例如,所有Linux GUI(实际上,几乎所有当代GUI框架)都基于XWindows

X起源于1984年的麻省理工学院(MIT)。自1987年9月以来,协议版本一直是X11.... X主要定义协议和图形原语 - 它故意不包含应用程序用户界面设计的规范,例如按钮、菜单或窗口标题栏样式。相反,应用软件 - 例如窗口管理器、GUI小部件工具包和桌面环境,或应用程序特定的图形用户界面 - 定义并提供这些详细信息。因此,没有典型的X接口,几个不同的桌面环境已经成为用户流行的选择。

有关此主题的更多信息,请参见那里的一些好信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接