- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在一个项目中是自定义记录器,我想扩展它以像 qDebug() 那样写入枚举值。有什么简单的方法吗?
这是我认为可能有用的东西(但它没有):
template <typename T>
typename QtPrivate::QEnableIf<QtPrivate::IsQEnumHelper<T>::Value, std::ostream>::Type
operator<<(std::ostream& os, T enumValue)
{
const QMetaObject* mo = qt_getEnumMetaObject(enumValue);
int enumIdx = mo->indexOfEnumerator(qt_getEnumName(enumValue));
return os << mo->enumerator(enumIdx).valueToKey(enumValue);
}
class MyObjet : public QObject
{
Q_OBJECT
public:
enum class Action { Open, Save, New, Copy, Cut, Paste, Undo, Redo, Delete };
Q_ENUM(Action)
explicit MyObjet(QObject* parent);
void myFunction(Action a)
{
std::count << "Action is:" << a << std::endl;
}
};
最佳答案
这是插入运算符重载,我把它放在一个名为qtenum2ostream.h的头文件中:
#ifndef QTENUM2OSTREAM_H
#define QTENUM2OSTREAM_H
#include <QMetaEnum>
template<typename T>
typename std::enable_if<QtPrivate::IsQEnumHelper<T>::Value, std::ostream &>::type
operator<<(std::ostream & o, const T & t)
{
const QMetaObject* metaobject = qt_getEnumMetaObject(t);
int enumindex = metaobject->indexOfEnumerator(qt_getEnumName(t));
o << metaobject->enumerator(enumindex).valueToKey(static_cast<int>(t));
return o;
}
#endif // QTENUM2OSTREAM_H
您现在可以在您的示例类中使用它:
#include "qtenum2ostream.h"
#include <iostream>
#include <QObject>
class MyObject : public QObject {
Q_OBJECT
public:
enum class Action { Open, Save, New, Copy, Cut, Paste, Undo, Redo, Delete };
Q_ENUM(Action)
void myFunction(Action a)
{
std::cout << "Action is:" << a << std::endl;
}
};
关于c++ - Q_ENUM 到 ostream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47926672/
我刚刚发现多个示例显示了 Q_ENUM 和 Q_ENUMS 的用法,并且查看 Q_ENUM 的定义告诉我它包括 Q_ENUMS 等定义。 在Q_PROPERTY、Qml/QtQuick、信号/槽、QV
QMetaEnum 包含将枚举索引转换为实际值的方法: int value(int index) const 但是如何转换回索引,例如,如果我想在某些需要按索引排序的控件中使用枚举? int inde
我有以下类(class): class A : public QObject { Q_OBJECT public: enum testEnum { one= 1
This documentation州 If you want to register an enum that is declared in another class, the enum must
在一个项目中是自定义记录器,我想扩展它以像 qDebug() 那样写入枚举值。有什么简单的方法吗? 这是我认为可能有用的东西(但它没有): template typename QtPrivate::
我正在开发一个项目,该项目具有 BOOST_SCOPED_ENUM 的枚举定义,例如: BOOST_SCOPED_ENUM_START(myEnum) { A = 0, B }; BO
我想使用 Qt 的枚举功能。我在QtCore模块的文档中看到有一个Q_ENUMS的宏,但我不知道如何使用他。 最佳答案 在python(和PyQt)中,创建枚举的方式是这样的: class MyEnu
我刚刚将 Qt 从 5.3.2 升级到 5.5.0。在 5.3.2 中编译得很好的项目(使用 QAbstractTableModel)在 5.5.0 中无法编译,报告以下错误(多次): /usr/lo
我打算在非基于 QT 的类中使用 Q_ENUMS: #include #include class SignalSpec: public QObject { Q_ENUMS(Modulat
我正在尝试从 QString 设置 Q_ENUM,但我不知道该怎么做。有没有人有这方面的经验? 最佳答案 枚举示例(也适用于普通枚举): enum class MyEnumType { foo,
我正在创建一个继承自 QLabel 的自定义小部件,我希望我的小部件上有一个属性来表示在向用户呈现时必须如何格式化数据。 为此,我正在尝试使用 Q_ENUMS,但我没有取得太大的成功。我可以获得在设计
这是我的包含 Q_ENUM 的类。我需要使用 Q_ENUM 因为我使用 QVariant。原因是在我的应用程序中,有一个部分我们调用 qRegisterMetaType,如果可能的话,我们希望仅在 1
我有一个包含多个 dll 的 QT 项目。 动态链接库:A、B、C A 依赖于 B 和 C。而 B 和 C 没有任何依赖关系。 B 导出自定义类 B_Custom。 B_Custom 类派生自 QOb
考虑以下类定义: // exported.hpp #include class Exported: public QObject { Q_OBJECT public: using Q
Q_ENUM 在继承的枚举上使用时无法按预期工作。 例如,有基结构 A(遗留类)和 B 继承自 A 和 QObject。 A 有一个枚举,B 有这个枚举的 Q_ENUM。 b.h #pragma on
我在 MyClass 中声明了一个 Q_ENUM,如下所示: class MyClass { public: enum Enum_Test { eTestA,
我可能在这里遗漏了一些明显的东西,但是当尝试将 Q_ENUM 公开给 QML 时,即使在最简单的情况下,似乎也无法像 QT 文档(http://doc.qt.nokia.com/4.7-snapsho
枚举不适合我。 我已经用 Q_ENUMS() 注册了它们 我没有忘记 Q_OBJECT 宏 使用 qmlRegisterType() 注册类型 模块是用QML导入的 简而言之,一切都是“照章办事”,但
我想在我的 QML 文件中使用来自另一个 header 的枚举。用 Q_ENUM 包装后,我无法让它与 qmlRegisterType 一起工作: class Test: public QObject
例如我有以下类(class): namespace someName { class someClass { Q_ENUMS(ESomeEnum) pu
我是一名优秀的程序员,十分优秀!