我正在寻找一种合理的跨平台方式来渲染窗口和小部件并以所需的方式对其进行样式设置,而又不会失去与OS首选的处理方式(如重绘或文本输入)交互的功能。作为一个具体示例,我也非常想知道Photoshop在Windows上是如何做到的。
我主要是为自己编写一个程序,但是如果以后对更多人有用的话,我希望可以与其他人共享该程序。我想真正自定义其外观,但希望使用本机GUI库(例如Windows窗体或比将我的界面呈现到X11窗口更具体的东西)来保持它的外观。因为我必须在Windows和X11上都使用它,所以该解决方案最好是跨平台的,但如果需要,我也准备实现多个UI前端,只要它可以在两个系统上提供合理一致的外观即可。OSX支持是一个加号,但还远远不是强制性的。我还没有看到将其移植到OSX的信息。我才刚刚开始。
我想要主题的原因很简单:我喜欢深色主题,因为它们使我的眼睛非常放松。在Windows上,Microsoft Visual Studio和Adobe Photoshop(默认情况下只有Photoshop和VS)显示一个黑暗的主题,我发现与这些软件一起工作可以使我的视线得到愉悦。但是,这两个函数似乎都使用Windows的本机控件(我可以使用Hawkeye来访问其中的各个小部件,它们似乎具有描述性的类名,与它们所代表的名称一致)。
我在Windows上比在X11系统上(在GNU / Linux上的GNOME,KDE,XFCE)更多地看到了此方法,这也许是因为Windows的主题是尽可能严格的,并且在X11窗口管理器和GUI工具包上(带有Qt的KDE出现了)我的想法)真的很灵活,因此当用户可以非常自由地在DE范围内选择应用时,应用无需实现自己的样式。
之前我并没有真正进行过GUI编程,因此感到有点迷茫。我想避免在带有OpenGL上下文的窗口中绘制所有GUI,因为我喜欢OS的想法,即根据用户的设置为我绘制清晰的亚像素级文本,并处理部分窗口重绘而不是完整的窗口那些。我还想通过例如文本输入与操作系统集成。正如我所说,我希望有一天可以共享该软件,所以如果我不必事先进行基本更改,那将是很好的。
我正在用C编写核心代码,因为我已经厌倦了用C ++徒劳的OOP(如果我是项目中唯一的人,那么我最大的好处就是我无法理解的最大好处),而我只想编写代码,但是我看到了C语言的GUI库不足,因此我准备用另一种语言编写GUI前端并将其链接到我的C对象文件。
最重要的是,为了关注多平台示例,Photoshop如何重新绘制本机Windows窗口小部件?我看到它在Windows和Mac上看起来非常一致。支持X11并不是什么大问题,因为我不会在X11版本中强行设置样式,只需通过标准的小部件库(Gtk +?Qt?)代理所有内容,然后让桌面环境/窗口管理器/ whatevs为我设置样式即可。尽管我对GNU / Linux桌面环境中的窗口和窗口小部件管理的工作方式还不甚了解,但还是做一些假设。
提前致谢。
注意:这纯粹是轶事,是基于我自己的假设。
由于Photoshop的时代,我假设它使用自己的自定义专有的GUI工具包。它可能使用底层操作系统的本机工具包,但很有可能只是模仿外观。我知道Sublime Text使用开发人员提供的自定义工具包。
我已经使用.NET,GTK(PyGTK)和Qt(PySide)制作了简单的应用程序。如果您想支持多个平台,由于涉及的工作量很大,我真的建议您使用跨平台工具包,而不是编写特定于每个OS的GUI。
我喜欢.NET,但它并不是真正的跨平台(我不确定Mono支持哪些功能)。
GTK2(通过PyGTK)对我们很直接。在Linux(Ubuntu)上看起来不错,但我无法在Windows上正常运行某些自定义样式(除非Windows 95看起来不错)。我还发现缺少PyGTK的文档。GTK3是前进的道路,但最后我知道它仍在大量开发中,并且在Windows上还不稳定。
我会说我最喜欢Qt(PySide)。我发现它的文档和示例比GTK更好。它支持本机OS主题以及自定义样式和主题(尽管我对此没有亲身经验)。默认情况下,它在Windows(XP和7)和Linux(Ubuntu)上看起来都是本地的。
我没有使用wxWidgets的经验,因此我对此没有发言权,但是它是跨平台的。
我建议您考虑使用Qt,尽管您必须使用C ++(或具有可用绑定的高级语言)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句