【问题标题】:How do I make an extension of qobject cross platformqobject如何跨平台扩展
【发布时间】:2015-12-18 08:42:30
【问题描述】:

我正在设法获得真正的全局热键(即,即使应用程序失焦,也会在某些输入上发出信号)

对于 win、osx 和 x11,这将需要不同的代码。在 qt 创建者中,我应该如何使它适合跨平台开发。

编辑:我不想知道如何使用 x11、windows 等执行实际代码。我只想知道如何为每个平台进行单独定义。

【问题讨论】:

    标签: qt cross-platform qt-creator


    【解决方案1】:

    我不想知道如何使用 x11、windows 等执行实际代码。 我只想知道如何为每个单独定义 平台。

    使用基于预定义编译器符号的 ifdef 很方便,例如:

    http://sourceforge.net/p/predef/wiki/OperatingSystems/

    #ifdef __linux__   // linux related, GCC has that macros
       // your code and/or definitions
    #endif
    
    #if defined(__linux__) || defined(macintosh)
       // your code and/or definitions
    #endif
    

    您也可以在那里使用 OR 逻辑,因为 Mac 上的许多东西都类似于 Linux,反之亦然。但是,请注意编译器,如果它有那个符号。我会将 OR 逻辑与适用编译器的所有平台符号一起使用。

    【讨论】:

    • 会是这个样子吗? #ifdef linux // Linux 兼容代码 #endif #ifdef macintosh // Mac 兼容代码 #endif 等
    • 是的。 X11 有点不确定,只要它不是操作系统而是 Linux 的 GUI 子系统。如果您确实需要识别,则也应使用其符号,例如X11.
    • 我会调查一下,但出于我的目的,我现在可以安全地假设 Linux 系统正在运行 x11。谢谢:)
    【解决方案2】:

    如果您愿意使用 Qt,它有 OS 和编译器定义供您轻松使用:

    #include <QtGlobal>
    
    #if defined(Q_OS_LINUX)
    // linux-specifc
    #elif defined(Q_OS_WIN32) && defined(Q_CC_MSVC)
    // win32 and msvc
    #endif
    

    Documentation.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多