gpt4 book ai didi

qt - 如何从 QEvent 获取人类可读的事件类型?

转载 作者:行者123 更新时间:2023-12-04 00:11:20 31 4
gpt4 key购买 nike

我想调试事件处理代码并想转换 QEvent::Type enum 的值转换为人类可读的字符串。 QEvent有一个 Q_GADGET宏,所以大概有办法把它拉下来?

最佳答案

将事件输出到调试流时,Qt 的最新版本会做正确的事情,因此不需要以下内容。 如果您收到类似 warning C4273: 'operator <<' : inconsistent dll linkage 的错误,这意味着您的 Qt 版本已经支持这一点,而无需下面的代码。
Q_GADGET宏添加了 QMetaObject staticMetaObject类(class)成员。静态元对象的定义是由 moc 生成的,它 - 在 QEvent 的情况下- 包含枚举信息。

下面是一个如何利用它来提供更合理的示例 QDebug事件的输出。

#include <QEvent>
#include <QMetaEnum>
#include <QDebug>

/// Gives human-readable event type information.
QDebug operator<<(QDebug str, const QEvent * ev) {
static int eventEnumIndex = QEvent::staticMetaObject
.indexOfEnumerator("Type");
str << "QEvent";
if (ev) {
QString name = QEvent::staticMetaObject
.enumerator(eventEnumIndex).valueToKey(ev->type());
if (!name.isEmpty()) str << name; else str << ev->type();
} else {
str << (void*)ev;
}
return str.maybeSpace();
}

使用示例:
void MyObject::event(QEvent* ev) {
qDebug() << "handling an event" << ev;
}

关于qt - 如何从 QEvent 获取人类可读的事件类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22535469/

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