C ++ / Qt定义/取消定义QT_NO_SESSIONMANAGER宏

时间:2012-07-15 08:48:52

标签: c++ qt macros c-preprocessor

我想编译QGis,它需要QApplication具有commitData()以及saveState()成员函数。想一想,如果声明的话,它们会放在预处理器中:

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

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

1 个答案:

答案 0 :(得分:2)

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

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

dpkg -l | grep libsm-dev

sudo apt-get install libsm-dev

再次尝试编译Qt的来源。运行qt的configure时,确保启用了会话管理(是)。