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

时间:2013-10-29 20:00:05

标签: c++ macos cocoa qt cross-platform

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

我想尝试以下方法:

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

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

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

再一次,抱歉我的无知,但这可能吗?这样理智吗?是否有任何真实的开源示例可以实现这样的目标?

2 个答案:

答案 0 :(得分:5)

有相当多的OS X应用程序具有完全定制设计的外观,不使用很多库存控件。我想到了iStat Menus,但还有许多其他例子。它们看起来仍然很好,但它是通过手动设计它们看起来很好并与OS X应用程序的整体外观“网格化”完成的。甚至他们的首选项窗格也不使用库存按钮。

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

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

同样适用于Windows:Qt为其拥有的所有顶级窗口运行消息接收器,您可以使用qtwinmigrate集成本机控件/窗口。您还可以使用Active Qt framework集成ActiveX控件。

答案 1 :(得分:3)

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

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

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

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