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

标签 c++ qt macros c-preprocessor

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

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

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

最佳答案

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

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

dpkg -l | grep libsm-dev

sudo apt-get install libsm-dev

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

关于C++/Qt 定义/取消定义 QT_NO_SESSIONMANAGER 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11490619/

相关文章:

c++ - 如何从 C++ 程序运行 regasm.exe?

ruby - QtRuby 可以与 Qt 5 一起使用吗?

c++ - 使用 C++ 在不同选项卡中显示相同 QWidget 的 QTabWidget 或 QTabBar

c++ - 宏需要一个表达式

c++ - SIMD __m256i 到 __m256d 转换结果

c++ - 枚举未实例化时是否有存储空间?

c++ - 使用 QProcess 读取标准输出

macros - 在方案中定义全局闭包的标准方法是什么?

C 宏 - 未在此范围错误中声明

c++ - 错误 : 'null' was not declared in this scope when setting integer to 0 - photon/arduino C++