【问题标题】:Qt: Adding native OS Specific code to projectQt:将本机操作系统特定代码添加到项目中
【发布时间】:2011-12-08 00:51:03
【问题描述】:

我的项目是一个用 C++ 编写的 Qt 应用程序,在 Windows、OS X 和 Linux 上运行。 Qt 在其抽象中没有涵盖某个领域:迭代桌面上活动的其他应用程序窗口,并返回它们的名称、它们的“句柄”和图标。

我有专门的操作系统代码来做这件事。

Windows 上的纯 Win32/C++ OS X 上的 Objective-C 以及一些适用于 linux 的 X11 c++ 代码

我想构建自己的抽象,利用那些特定于操作系统的本机 sn-ps 为其提供所需的运行时数据。

所以,我必须使用我的 OS X 构建构建和运行 Objective-C 代码 Win32/c++ 带windows 和Linux类似

让我们专注于 Mac,仅针对此示例。如何将目标 C 类组合到我的 Qt C++ 项目中?我如何从 C++ 调用它?是否有任何示例可以让我看到它是如何完成的?

理想情况下,我希望在项目中包含特定于操作系统的代码,而不是构建要链接的单独共享库,尽管如果没有其他办法,这是一个选项。

【问题讨论】:

    标签: c++ objective-c qt


    【解决方案1】:

    我建议将它们制作成静态库并将它们链接起来。它使代码变得简单直接。它增加了构建的复杂性,但一般来说,要么全有,要么全无。一旦你得到它的工作,没有任何陷阱。

    诸如预处理器之类的东西定义了工作,但是当它们中断时,开发人员并不总是很清楚为什么。

    【讨论】:

      【解决方案2】:

      我想我会在这种情况下创建共享库。无论如何,我要建议的是一个想法,但应该可行。

      通过使用 qmake 功能,我将为每个平台创建一个具有不同配置的 pro 文件,其中每个配置(CONFIG 变量)包含不同的源(这是如果你不想使用简单的 ifdef 的话。我通常做的是在不同的 cpp 文件中为每个平台创建一个通用的头文件和不同的实现。例如:

      /* platformaspecific.h */
      class PlatformSpecific : public QObject
      {
         PlatformSpecific(QObject* parent = 0);
         QList<void*> getHandleForWindows(...);
         void doSomethingPlatformIndependent();
         ...
      };
      
      /* platformspecific_x11.cpp */
      PlatformSpecific::PlatformSpecific(QObject* parent) : QObject(parent)
      {
         ...
      }
      
      PlatformSpecific::getHandleForWindows(...)
      {
         ...
      }
      
      ...
      
      /* platformspecific_win.cpp */
      PlatformSpecific::PlatformSpecific(QObject* parent) : QObject(parent)
      {
         ...
      }
      
      QList<void*> PlatformSpecific::getHandleForWindows(...)
      {
         ...
      }
      
      /* platformspecific_common.cpp (if needed) */
      void PlatformSpecific::doSomethingPlatformIndependent()
      
      ...
      

      等等……

      然后,在您的 .pro 文件中,您使用不同的范围并根据其相关 CONFIG 包含源文件。

      CONFIG += X11
      
      X11 {
         SOURCES += platformspecific_x11.cpp
      }
      else:WIN {
         SOURCES += platformspecific_win.cpp
      }
      ...
      
      SOURCES += platformspecific_common.cpp
      

      在此之后,对于包含 Objective-C 的部分,您将不得不使用 Objective-C++。你可以很容易地将 C++ 和 Objective-C 与 Objective-C++ 混合,只是有些事情是不允许的,比如用 Objective-C 扩展 C++ 类等等......你可以在苹果开发中心。我不知道使用 Qt Creator 在 Objective-C++ 中编程有多好,但无论如何你总是可以使用 qmake 从 .pro 文件创建一个 Xcode 项目:阅读此http://doc.qt.io/archives/qt-4.7/qtmac-as-native.html#development-tools

      通过使用这种方法或类似的方法,它应该很舒服。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-02
        • 1970-01-01
        • 2017-12-07
        • 1970-01-01
        • 1970-01-01
        • 2017-12-18
        • 2013-05-31
        相关资源
        最近更新 更多