Q_QDOC/Qt里那些仅存在于代码中而不存在于文档中的定义
Qt项目在使用Doxygen生成开发文档的过程中,会使用Q_QDOC宏来对生成的文档进行微调,使得,妳在Qt文档中看到的各个标识定义并不与实际代码完全相同。
Qt 5.7.1中,QWebEnginePage类中有一个枚举,叫做 enum QWebEnginePage:: Feature 。
在文档中,这个枚举有5个值:
This enum describes the platform feature access categories that the user may be asked to grant or deny access to:
Constant |
Value |
Description |
QWebEnginePage::Geolocation |
1 |
Location hardware or service. |
QWebEnginePage::MediaAudioCapture |
2 |
Audio capture devices, such as microphones. |
QWebEnginePage::MediaVideoCapture |
3 |
Video devices, such as cameras. |
QWebEnginePage::MediaAudioVideoCapture |
4 |
Both audio and video capture devices. |
QWebEnginePage::MouseLock |
5 |
Mouse locking, which locks the mouse pointer to the web view and is typically used in games. |
See also featurePermissionRequested (), featurePermissionRequestCanceled (), setFeaturePermission (), and PermissionPolicy .
而在代码中呢,实际上是有6个值的:
enum Feature {
#ifndef Q_QDOC
Notifications = 0,
#endif
Geolocation = 1,
MediaAudioCapture = 2,
MediaVideoCapture,
MediaAudioVideoCapture,
MouseLock
};
可以看到,由于Q_QDOC宏的存在,使得,在生成文档时,Notifications = 0 ,并未被包含在代码中,因而文档中就看不到这个枚举值的定义了。实际上在写代码时,是可以正常引用这个枚举值的。
这个值本身有实际作用,当网页通过Notifications接口向浏览器请求权限以发出通知时,Qt WebEngine就会发射对应的信号向妳的代码告知这一点,这个过程中就会用到这个值。
在Qt 5.7.1中,除了QWebEnginePage以外,还有一些地方也使用Q_QDOC隐藏掉了一些定义。见下表,后面两列附上本座认为的用途和隐藏原因。
文件名 |
行号 |
定义内容 |
用途 |
隐藏原因 |
qvideoframe.h |
106 |
NPixelFormats, |
在Qt内部代码中用于指明支持的视频格式的具体数目。有个数组,qConvertFuncs,其元素个数即为NPixelFormats,与视频格式数目相等。 |
这个枚举值只是起到计数作用,其意义不符合这个枚举的定义“视频数据格式”。 |
qqml.h |
503 |
namespace QtQml { |
QtQml模块的命名空间。 |
为了绕过文档生成工具的一个问题。 |
qwebenginepage.h |
159 |
Notifications = 0, |
用于表示网页请求获取权限以弹出通知。 |
在当时,这个特性尚未实现。 |
qwebengineurlschemehandler.h |
65 |
Q_SIGNALS: void _q_destroyedUrlSchemeHandler(QWebEngineUrlSchemeHandler*); |
内部使用,用于在对象销毁时做些善后工作。 |
内部使用,不向外暴露。 |
qaccessible.h |
272 |
PushButton = Button, // deprecated |
表示对应的对象是一个按钮。 |
已经废弃。 |
qbytearraylist.h |
67 |
protected: ~QListSpecialMethods() {} |
QByteArrayList的真正析构函数。 |
隐藏看起来怪异的析构函数。 |
qcoreapplication.h |
93 |
, int = ApplicationFlags |
内部使用的参数。 |
隐藏内部使用的参数。 |
qdbusargument.h |
163 |
, T * = Q_NULLPTR |
使用匿名参数帮助声明模板。 |
隐藏无用的参数。 |
qdbusconnection.h |
103 |
// Qt 4.2 had a misspelling here ExportAllSignal = ExportAllSignals, |
使用别名来兼容Qt 4.2中拼错的一个枚举值。 |
隐藏拼错了而不应当被使用的枚举值。 |
qdbusconnectioninterface.h |
111 |
// internal signals // do not use void NameAcquired(const QString &); …… |
内部使用的信号。 |
隐藏内部使用的信号。 |
qdbuserror.h |
90 |
// don't use this one! LastErrorType = InvalidMember |
为枚举值定义上限。 |
隐藏不应当由用户使用的上限值。 |
qdbusmetatype.h |
76 |
T * /* dummy */ = 0 |
使用匿名参数帮助声明模板。 |
隐藏无用的参数。 |
qdbuspendingcall.h |
73 |
// pretend that they aren't here bool isFinished() const; …… |
一些内部使用的辅助方法。 |
隐藏内部使用的方法。 |
qdrawutil.h |
123 |
// For internal use only. namespace QDrawBorderPixmap { …… } |
内部使用的一个命名空间。 |
隐藏内部使用的命名空间。 |
qimage.h |
127 |
NImageFormats |
对支持的格式进行计数。 |
隐藏不应当被使用的格式数目计数值。 |
qjsonvalue.h |
195 |
// ### Qt 6: Get rid of these fake pointer classes class QJsonValuePtr { …… }; …… |
用于为QJsonArray和QJsonObject的迭代器提供->操作符。 |
隐藏内部使用的指针类。 |
qmetatype.h |
412 |
// The code that actually gets compiled. enum Type { …… }; |
此处,在生成文档时和编译时使用两套不同的代码。因为实际编译时使用的代码如果直接拿来生成文档则不容易理解,而使用单 独的一套代码来专门用于生成代码,则特别美。 |
这砣代码只是在编译期使用,不应当出现在文档中。 |
qnamespace.h |
1663 |
// NOTE: Generally, do not add QT_Q_ENUM if a corresponding Q_Q_FLAG exists. QT_Q_ENUM(ScrollBarPolicy) …… |
将一系列的名字集合到Qt命名空间中去。 |
绕过文档生成工具的某些问题。 |
qopengltexture.h |
235 |
enum TextureFormatClass { …… }; |
内部使用,用于检查不同纹理格式之间的兼容性。 |
隐藏内部使用的定义。 |
qplugin.h |
66 |
QtPluginInstanceFunction instance; QtPluginMetaDataFunction rawMetaData; |
对对象进行实例化。 |
绕过文档生成工具的某些问题。 |
qprinter.h |
82 |
typedef PageSize PaperSize; |
使用别名来表示将要废弃的枚举类型。 |
使用两套代码帮助文档生成工具生成美丽的文档。 |
qqueue.h |
57 |
// bring in QList::swap(int, int). We cannot say using QList<T>::swap, // because we don't want to make swap(QList&) available. inline void swap(int i, int j) { QList<T>::swap(i, j); } |
此接口,用于交换队列中的两个元素。 |
隐藏掉可能引起误解的文档。 |
qsharedpointer.h |
48 |
# include <QtCore/qsharedpointer_impl.h> |
包含QSharedPointer的具体实现。 |
使用两套代码帮助文档生成工具生成美丽的文档。 |
qstringlist.h |
69 |
protected: ~QListSpecialMethods() {} |
QStringList的真正析构函数。 |
隐藏看起来怪异的析构函数。 |
qtconcurrentfilterkenerl.h |
56 |
namespace QtConcurrent { …… } // namespace QtConcurrent |
QtConcurrent命名空间的定义。 |
绕过文档生成工具的某些问题。 |
qtconcurrentfunctionwrappers.h |
53 |
namespace QtConcurrent { …… } // namespace QtConcurrent. …… |
QtConcurrent命名空间的定义。 |
绕过文档生成工具的某些问题。 |
qtconcurrentiteratekernel.h |
58 |
namespace QtConcurrent { …… } // namespace QtConcurrent |
QtConcurrent命名空间的定义。 |
绕过文档生成工具的某些问题。 |
qtconcurrentmapkernel.h |
54 |
namespace QtConcurrent { …… } // namespace QtConcurrent |
QtConcurrent命名空间的定义。 |
绕过文档生成工具的某些问题。 |
qtconcurrentmedian.h |
56 |
namespace QtConcurrent { …… } // namespace QtConcurrent |
QtConcurrent命名空间的定义。 |
绕过文档生成工具的某些问题。 |
qtconcurrentreducekernel.h |
69 |
/* …… */ enum { ReduceQueueStartLimit = 20, …… }; …… |
归并队列长度上限定义。 |
绕过文档生成工具的某些问题。 |
qtconcurrentrunbase.h |
56 |
namespace QtConcurrent { …… } // namespace QtConcurrent |
QtConcurrent命名空间的定义。 |
绕过文档生成工具的某些问题。 |
qtconcurrentstoredfunctioncall.h |
54 |
namespace QtConcurrent { …… } // namespace QtConcurrent |
QtConcurrent命名空间的定义。 |
绕过文档生成工具的某些问题。 |
qtconcurrentthreadengine.h |
60 |
namespace QtConcurrent { …… } // namespace QtConcurrent |
QtConcurrent命名空间的定义。 |
绕过文档生成工具的某些问题。 |
qtestcase.h |
346 |
QTEST_COMPARE_DECL(short) …… |
若干基本数据类型的声明。 |
绕过文档生成工具的某些问题。 |
qvariant.h |
364 |
struct PrivateShared { …… }; …… |
内部使用,用来实现联合体功能的共享存储对象。 |
隐藏内部使用的类定义。 |
qwidget.h |
743 |
template <> inline QWidget *qobject_cast<QWidget*>(QObject *o) { …… } …… |
将对象转换成界面部件。 |
绕过文档生成工具的某些问题。 |
qwindow.h |
367 |
template <> inline QWindow *qobject_cast<QWindow*>(QObject *o) { …… } …… |
将对象转换成界面窗口。 |
绕过文档生成工具的某些问题。 |
未知美人
未知美人
未知美人
未知美人
未知美人
Your opinionsHxLauncher: Launch Android applications by voice commands