关于在 Qt 中使用未记录的类

Posted

技术标签:

【中文标题】关于在 Qt 中使用未记录的类【英文标题】:About using an undocumented class in Qt 【发布时间】:2011-11-24 17:30:18 【问题描述】:

在 Qt 中使用未记录的 QObjectUserData 类和 QObject::setUserData 是否安全?

【问题讨论】:

好像是Qt 4.2的残余?我建议使用更新版本的 Qt,比如 4.7。你到底想用它做什么? 【参考方案1】:

相反,您可以查看使用QObject::setProperty,这不仅允许您设置编译时声明的属性,还可以设置不需要在使用前声明的动态属性。这允许您在运行时将任意值附加到 QObjects,类似于用户数据。

【讨论】:

【参考方案2】:

一般来说,您不应依赖未记录的 API。如果您打算升级 Qt,请不要使用它!

【讨论】:

【参考方案3】:

未记录的类通常是内部类,而不是 Qt API 的一部分。这意味着,不能保证 API 不会更改或在下一个 Qt 版本中完全删除该类。例如,qobject_p.h 包含以下警告:

//  W A R N I N G
//  -------------
//
// This file is not part of the Qt API.  It exists for the convenience
// of qapplication_*.cpp, qwidget*.cpp and qfiledialog.cpp.  This header
// file may change from version to version without notice, or even be removed.
//
// We mean it.

因此,如果您使用内部 API,则只能靠自己,并且在切换到下一个 Qt 版本时可能必须修复/重新实现您所做的任何事情。

【讨论】:

以上是关于关于在 Qt 中使用未记录的类的主要内容,如果未能解决你的问题,请参考以下文章

关于 屏蔽Qt未使用变量报警错误 的解决方法

关于 屏蔽Qt未使用变量报警错误 的解决方法

如何使用Qt插件中的宿主应用程序的类?

使用 Qt 对 vtable 的未定义引用

在 moveToThread() 之后未调用 Qt 4.8 信号/插槽

QT 信号和槽式如何实现的