【问题标题】:C++/Qt defining/undefining QT_NO_SESSIONMANAGER macroC++/Qt 定义/取消定义 QT_NO_SESSIONMANAGER 宏
【发布时间】:2012-07-15 08:48:51
【问题描述】:

我想编译需要 QApplication 具有 commitData() 以及 saveState() 成员函数的 QGis。想一想,它们被放入预处理器 if 语句中:

#ifndef QT_NO_SESSIONMANAGER
void commitDataRequest(QSessionManager &sessionManager);
void saveStateRequest(QSessionManager &sessionManager);
#endif

但是QT_NO_SESSIONMANAGER 被定义了,这些函数没有被声明,也没有被定义。当我#undef qapplication.h 中的宏时,我收到未定义的引用错误。所以,看来我应该用另一种方式解决这个问题。 我怀疑我使用的 Qt 配置是否有问题,因为会话管理器是在预构建的 Qt 库中定义的,但它不在我编译的 Qt v4.8.2.2 的 Qt 中。也有可能我应该向 qmake 或 gcc 发送一些参数来定义/取消定义这个宏。我在网上和 stackoverflow 上搜索了一段时间的相关资料,但没有找到答案。

【问题讨论】:

    标签: c++ qt macros c-preprocessor


    【解决方案1】:

    这是您的 Qt 配置有问题。您编译的 Qt 似乎没有会话管理支持(支持 X 会话管理,-lSM -lICE 中的链接)。

    您的系统上可能没有安装 sm-dev 库:

    dpkg -l | grep libsm-dev

    sudo apt-get install libsm-dev

    再次尝试编译您的 Qt 源代码。确保在运行 qt 的配置时启用会话管理(是)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      相关资源
      最近更新 更多