为跨平台应用程序创建许多本机 GUI 前端

Creating many native GUI frontends for a cross-platform application

本文关键字:GUI 前端 许多本 创建 跨平台 应用程序      更新时间:2023-10-16

我已经离开GUI编程一段时间了,所以请原谅我的无知。

我想尝试以下方法:

  • 编写一个Mac OSX应用程序,但仍然能够移植到Win/Linux(即使用Obj-C GUI的C++核心)
  • 避免在OSX上使用Qt/其他工具包(即直接与Cocoa交谈 - 我觉得与系统的其他部分相比,我使用的许多Qt应用程序都像拇指酸痛一样突出)
  • 不是那么重要,但如果Visual Studio有助于创建更好的代码,那么避免使用Visual Studio会很好,这意味着我可以自由地使用更新的C++功能,即使在Windows上也是如此。

我相信这种配置可能会让我得到我想要的东西:

  • 核心C++静态库
  • OSX GUI (Cocoa)
  • Windows GUI (Qt+MinGW?)OR (没有新的C++功能,Visual Studio + ManagedC++/C#/????)
  • Linux GUI (Qt)

再一次,对不起我的无知,但这可能吗? 这是理智的吗? 有没有现实世界的开源示例来完成这样的事情?

相当多的OS X应用程序具有完全定制设计的外观,不使用太多的库存控件。 我想到了iStat菜单,但还有许多其他例子。它们看起来仍然不错,但这是通过手动设计它们看起来不错并与OS X应用程序的整体外观"融合"来完成的。甚至他们的偏好设置面板也不使用股票按钮。

因此,你可以使用Qt走得很远,你只需要密切关注你正在做的事情 - 类似于其他开发人员在使用Cocoa时密切关注的方式。您会发现Qt的控件提供的功能通常超出Cocoa提供的功能。

也就是说,在OS X上,有时您可能需要运行一些需要存在CFRunLoop的本机代码。很高兴知道Qt的事件循环已经为你旋转了一个运行循环,所以只要你在给定的线程中有一个事件循环旋转,你就可以使用基于runloop的代码 - 默认的运行循环是由Qt的QEventDispatcher实现提供的(在其内部的某个地方)。对于非 gui 线程,未修改的QThread会为您完成。例如,这对于使用异步IOKit功能很有用。我的另一个答案是一些可可鼠标事件抓取代码。使用Carbon的先前版本可以在该答案的编辑历史记录中找到。

Windows也是如此:Qt为其拥有的所有顶级窗口运行消息接收器,您可以使用qtwinmigrate集成本机控件/窗口。您还可以使用 Active Qt 框架集成 ActiveX 控件。

好吧,

我认为您即使在OSX上也应该尝试Qt。Qt允许应用程序的本机/自定义外观(你提到的那些情况可能是不好的例子 - 你可能没有注意到许多其他应用程序也使用Qt)。

我通常用于多平台开发的工具:

  • C++(现在C++11,因为所有主要编译器或多或少都支持它)
  • 提高
  • Qt
  • CMake 作为构建系统生成器

如果您使用此工具集,您可以选择您喜欢的任何平台进行开发,并且仍然是多平台的,而无需在其他平台上进行大量工作。