原生 GUI 的解决方案是什么?
What's the solution to native GUIs?
根据我从SO那里了解到的,Qt在OS X上看起来根本不是原生的。
那么你该如何解决这个问题呢?您是否使用其他GUI库,如GTK?但它不会是Linux以外的任何东西的原生版本,对吧?
你必须为每个操作系统编写一个GUI吗?所以你为Windows写了一个Qt GUI,为Linux写了一份Qt GUI和为OS X写了一封Qt GUI?或者它看起来仍然是非本地的?
您是否必须根据操作系统使用不同的GUI库?所以你用Qt来运行Windows,用GTK来运行Linux,用Cocoa来运行OS X?但Qt不仅仅是一个GUI库;它有很多特点。那么,这是否意味着你需要重新发明Linux的轮子;OS X?
根据我的经验,在开发GUI时有两个相互竞争的目标:
- 避免在为每个平台重新编码时重复工作
- 看起来它100%"属于"它运行的平台
就目前情况来看,你基本上必须选择对你最重要的一个。
据我所知,没有一个GUI工具包能够实现可移植性和结果"属于"每个平台的理想完美性,这包括C++和Java选项。肯定有一些东西能达到近乎本土的外观,但总有一些东西不太对劲。就我个人而言,我更喜欢我所说的"引擎可移植性",我相信它也有更花哨的名字。基本上,它是让你的逻辑核心尽可能地可移植,同时能够(但不需要)在必要时移植GUI。
这基本上意味着不依赖像Qt这样的库的所有非GUI功能,除非你确信它们将在你需要运行的每个目标平台上都可用。例如,我不得不将一些C++代码移植到Android,而当时Android上的Qt并不存在。如果我的核心逻辑依赖于它,我会有麻烦的。如果我的引擎没有很好地与GUI分离,我可能会遇到麻烦。事实上,我不得不用Java重新编码UI,然后通过JNI调用引擎。我还必须移植一些较低级别的功能,如线程,因为C++11当时还没有最终确定,我不能使用boost线程,而且原始代码是针对Windows的。但是核心逻辑并没有直接调用操作系统线程库,所以绝大多数代码都不需要被处理。
(顺便说一句:这并不是说你不能使用像Qt这样的非GUI功能,但如果你的代码与它集成在一起,那么如果你必须为库不支持的平台编码,你就会陷入困境。如果你在代码和Qt之间有一个抽象层,那么你只需要移植抽象层。)
便携性并不容易。事情肯定已经走过了很长的路,但我们还没有达到我们开发者想要的,我不相信我们真的会做到。
这只是IMHO,但它是基于经验的。
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- C++集<T> 什么是最合适的解决方案?
- 使用STL对用户输入数组进行排序的错误有什么解决方案吗?
- 在这种情况下,我们可以使用静态而不是朋友吗,还有其他解决方案是什么
- 什么是最快的解决方案,用于读/写入哈希映射
- 构建C 插件时的错误,该解决方案是什么
- 从QTcpSocket上的数据流中连续运行复杂算法的最佳Qt线程解决方案是什么
- 正在(在构造函数中)将其包含一个不良设计的指针传递,如果是的,则解决方案是什么
- Qt 创建者,跟踪:不允许操作.什么是永久解决方案
- 暂停和恢复线程的最佳解决方案是什么?
- Windows上的模板有什么问题?解决方案是什么
- 为什么“从'x*'到'y'失去精度”是一个硬错误,什么是适合旧版代码的解决方案
- C++构建一个带有运算符重载的双边树-什么是好的内存解决方案
- C++使用垃圾收集器是矫枉过正,什么是更好的解决方案
- 来自 std::find 的此错误的优雅解决方案是什么
- 为什么通过系统("color YX")更改控制台应用程序中C++颜色不是最佳解决方案?
- 请有人告诉我,而代码,当运行时,打印1而不是3.5作为解决方案
- 为std::function赋值抽象函数——为什么std::ref是一个解决方案
- 无论尝试什么解决方案,ofstream/fstream都不会起作用