C++ c++;自定义UI工具包--跨平台抽象层选项
作为跨平台文本编辑器Sublime text 2的粉丝,我一直在研究它是如何开发的。开发人员注意到,它有99%个C++,其中有一些GTK用于Linux,并且它使用了他称为“崇高GUI”的自定义UI工具包。这是开发人员的一段引述 升华文本2本身使用自定义UI工具包。有很多应用程序这样做可能没有意义,但对于Sublime Text来说,这并不是一个不合理的选择,因为我一直都知道,无论使用何种工具包(例如,文本控件和选项卡控件),很多UI控件都必须是自定义的。UI工具包位于跨平台抽象层之上,它更像是平台功能的联合体,而不是最低公分母 我的问题是,跨平台抽象层有哪些选项?我假设这比GTK、QT、SDL的水平低。我试图弄明白如何创建一个跨平台的定制UI工具包,并且只需编写一次代码C++ c++;自定义UI工具包--跨平台抽象层选项,c++,qt,user-interface,sublimetext2,C++,Qt,User Interface,Sublimetext2,作为跨平台文本编辑器Sublime text 2的粉丝,我一直在研究它是如何开发的。开发人员注意到,它有99%个C++,其中有一些GTK用于Linux,并且它使用了他称为“崇高GUI”的自定义UI工具包。这是开发人员的一段引述 升华文本2本身使用自定义UI工具包。有很多应用程序这样做可能没有意义,但对于Sublime Text来说,这并不是一个不合理的选择,因为我一直都知道,无论使用何种工具包(例如,文本控件和选项卡控件),很多UI控件都必须是自定义的。UI工具包位于跨平台抽象层之上,它更像是平
我很欣赏UI工具包的好处,但是如果我想在Windows、Linux和Mac上获得对我的应用程序的支持,我不知道从哪里开始。我想最重要的问题是如何绘制和获取键盘和鼠标事件 在我看来,绘画有两种方法:
记住,我从来没有实施过这样的事情。然而,我可能会尝试OpenGL方法,因为我相信实现这一目标所需的工作更少 有许多跨平台工作的GUI工具包(Tk、QT和GTK等) 如果您想编写自己的工具,那么它不必是比GTK、QT或类似工具级别更低的工具 您可以公开与此类似的接口
void draw_window(mywindow *mw, char *name){
non platform specific code goes here (maybe arg parsing, etc.)
#IFDEF windows
windows specific code goes here
#ENDIF
#IFDEF macosx
mac specific code goes here
#ENDIF
#IFDEF linux
linux specific code goes here
#ENDIF
non platform specific code goes here (tidying up, recording state, etc.)
}
在每个特定于平台的部分中,您可以将其分派到该平台的gui工具包中,或者使用任何可用的接口(例如,X11 for Unix)
编译代码时,指定目标平台,这决定了编译哪些IFDEF节
当然,这过于简化了,必须非常小心,以便您公开的接口不会太难映射到本机等价物上。根据我看到的情况,它可能使用GDI和XLib。使用类似Fraps的东西,如果正在使用gpu,您会看到调试信息,但是没有调试信息。所以我相信它是在做软件渲染。同样运行gDEbugger的还有0个OpenGL调用。虽然我只是在Windows上测试,所以OpenGL也有可能在其他平台上使用,尽管我对此表示怀疑。是否有任何教程解释了一个基本的窗口,其中很少有组件创建。只是想了解一下。在代码中包含ifdef很难维护,所以从来都不是一个好主意。最好有一个用于绘图的抽象,然后在这里使用。当然,这个抽象仍然依赖于操作系统,但是最小化为库中的一个小部分和专用部分。顺便说一句,Qt就是这么做的。如果您查看与平台相关的部分,您会注意到>98%的Qt是与平台无关的。所以只要使用Qt,它就是正确的选择。