gpt4 book ai didi

c++ - Qt 命名空间的元类型信息

转载 作者:行者123 更新时间:2023-11-30 04:26:59 36 4
gpt4 key购买 nike

如果您检查 Qt 源代码中的 qnamespace.h,您会看到如下内容:

#ifndef Q_MOC_RUN
namespace
#else
class Q_CORE_EXPORT
#endif
Qt {

#if defined(Q_MOC_RUN)
Q_OBJECT
#endif

#if (defined(Q_MOC_RUN) || defined(QT_JAMBI_RUN))
// NOTE: Generally, do not add Q_ENUMS if a corresponding Q_FLAGS exists.
Q_ENUMS(ScrollBarPolicy FocusPolicy ContextMenuPolicy)
Q_ENUMS(ArrowType ToolButtonStyle PenStyle PenCapStyle PenJoinStyle BrushStyle)
Q_ENUMS(FillRule MaskMode BGMode ClipOperation SizeMode)
Q_ENUMS(BackgroundMode) // Qt3

我对这段代码的解释是,moc 预处理器被骗去为伪造的 Qt 对象生成元类型信息。我怎样才能访问这个“假的”元对象来获取例如 ArrowType 和其他枚举的 QMetaEnum

最佳答案

下面的代码就是这样做的。输出是:

LeftArrow
#include <QtCore/QTextStream>
#include <QtCore/QMetaEnum>

struct StaticQtMetaObject : public QObject
{
static inline const QMetaObject& get() {return staticQtMetaObject;}
};

int main(int argc, char *argv[])
{
const QMetaObject& mo = StaticQtMetaObject::get();
int index = mo.indexOfEnumerator("ArrowType");
QMetaEnum me = mo.enumerator(index);
Qt::ArrowType arrowType = Qt::LeftArrow;
QTextStream(stdout) << me.valueToKey(arrowType) << endl;
return 0;
}

http://qt-project.org/forums/viewthread/658 提供

关于c++ - Qt 命名空间的元类型信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11191389/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com