我已经离开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 作为构建系统生成器
如果您使用此工具集,您可以选择您喜欢的任何平台进行开发,并且仍然是多平台的,而无需在其他平台上进行大量工作。