2

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

我想尝试以下方法:

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

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

  • 核心 C++ 静态库
  • OSX GUI(可可)
  • Windows GUI (Qt+MinGW?) 或 (没有新的 C++ 功能,Visual Studio + ManagedC++/C#/????)
  • Linux 图形用户界面 (Qt)

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

4

2 回答 2

5

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

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

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

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

于 2013-10-29T21:51:14.190 回答
3

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

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

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

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

于 2013-10-29T20:09:39.517 回答