2012-07-15 262 views
2

我想编译QGis,它需要QApplication具有commitData()以及saveState()成员函数。思想,它们被放在一个预处理if语句:C++/Qt定义/未定义QT_NO_SESSIONMANAGER宏

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

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

回答

2

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

也许,你没有在系统上安装了SM-dev的库:

的dpkg -l | grep的libsm-dev的

命令和apt-get安装libsm-dev的

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