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

Hug*_*ung 2 c++ macos cocoa qt cross-platform

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

我想尝试以下方法:

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

我相信这个配置可能会让我得到我正在寻找的东西:

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

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

Rei*_*ica 5

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

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

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

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