c++ custom UI ToolKit -- 跨平台抽象层的选项

标签 c++ qt user-interface sublimetext2

作为跨平台文本编辑器 Sublime Text 2 的粉丝,我一直在研究它的开发方式。开发人员注意到它是 99% 的 c++ 和一些用于 linux 的 GTK,并且它使用他称之为“Sublime GUI”的自定义 UI 工具包。这是来自开发者的引述

Sublime Text 2 itself uses a custom UI toolkit. There are a lot of apps where this may not make sense, but it's not such an unreasonable choice for Sublime Text, where I always knew that a lot of the UI controls were going to have to be custom no matter the toolkit (e.g., the text control and tab controls). The UI toolkit sits on top of a cross platform abstraction layer, which is more a union of platform functionality rather than lowest common denominator.

我的问题是,跨平台抽象层有哪些选项?我认为这是比 GTK、QT、SDL 更低的水平。我正在尝试弄清楚如何创建一个跨平台且只需编写一次代码的自定义 UI 工具包。

我很欣赏 UI 工具包的好处,但如果我想亲自动手并在 Windows、Linux、Mac 上支持我的应用程序,我不确定从哪里开始。

最佳答案

我想最重要的问题是如何绘制和获取键盘和鼠标事件。

据我所知,有两种绘图方法:

  1. 创建 OpenGL 上下文并使用 OpenGL 绘制小部件。喜欢glui .
  2. 使用原生绘图基础设施。喜欢GDI+在 window 上,XLib在 X11 上。

当然,您需要为每个平台实现某些功能。使用 OpenGL,您需要为每个平台编写上下文(WGL、GLX、..)处理,而使用 native 绘图基础结构,您需要做更多的工作。由于所有绘图基础设施都是独一无二的,您可能希望为绘图编写一个抽象,然后使用您的绘图抽象层实现您的小部件。

至于事件处理,我认为您还需要编写自己的抽象,因为每个平台的事件处理都是唯一的。

最后,您还应该有一个抽象层,用于创建您在其中绘制小部件并从中获取事件的主窗口。

使用 OpenGL 时,您可以从 glut 开始,它已经处理了窗口创建和事件处理。

请记住,我从来没有实现过这样的事情。但是,我可能会尝试 OpenGL 方法,因为我相信实现目标的工作量较小。

关于c++ custom UI ToolKit -- 跨平台抽象层的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14430676/

相关文章:

c++ - 一旦到达终点,返回到 Vector 的顶部 C++

c++ - 如何替换某些范围的 std::vector 数据

C++ - 将 RGB 一维数组转换为 OpenCV Mat 图像

qt - 从 QML 组合框传播点击

c++ - QTime 缓冲区溢出?

c++ - 需要从静态成员调用函数(由静态指针引用)

python - python3.4中的QWebPage和pymongo在哪里可以找到?

android - 从网络接收到新项目后,如何在 flutter.io 中重绘小部件网格?

java - Lwjgl GUI 库

java - 添加 JTextArea 会使 JFrame 变得巨大,为什么?