1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef ENUMPROBLEMS_H
#define ENUMPROBLEMS_H
#include <QObject>
#include <QtCore/qflags.h>
#include <QtQml/qqml.h>
#include <QtQml/qqmlregistration.h>
class Foo : public QObject {
Q_OBJECT
public:
enum Type {
Unknown,
Fighter,
Component
};
Q_ENUM(Type)
explicit Foo(Foo::Type type, QObject *parent = nullptr) : QObject(parent), m_type(type) {}
Type type() const { return m_type; }
private:
Type m_type = Type::Unknown;
};
namespace FooWrapper {
Q_NAMESPACE
QML_FOREIGN_NAMESPACE(Foo)
QML_NAMED_ELEMENT(Foo)
};
class FooThingWrapper {
Q_GADGET
QML_FOREIGN(Foo)
QML_NAMED_ELEMENT(FooThing)
QML_UNCREATABLE("nope")
};
class FooFactory : public QObject {
Q_OBJECT
QML_ELEMENT
Q_PROPERTY(T8 t8 READ t8 CONSTANT FINAL)
Q_PROPERTY(T16 t16 READ t16 CONSTANT FINAL)
public:
enum T8: qint8 {
A, B, C
};
Q_ENUM(T8)
enum T16: qint16 {
D = 500, E, F
};
Q_ENUM(T16)
T8 t8() const { return C; }
T16 t16() const { return E; }
Q_INVOKABLE Foo* get(Foo::Type type) const { return new Foo(type); }
};
class ControlFlags : public QObject {
Q_OBJECT
QML_ELEMENT
QML_UNCREATABLE("Flag Container Class")
public:
enum Option {
ControlA = 0x1,
ControlB = 0x2,
Both = ControlA | ControlB
};
Q_DECLARE_FLAGS(Options, Option)
Q_FLAG(Option)
};
class ScopedEnum : public QObject {
Q_OBJECT
QML_NAMED_ELEMENT(Data)
Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
public:
enum class DType {
A = 27, B
};
Q_ENUM(DType)
enum EType {
C = 7, D
};
Q_ENUM(EType)
};
class UnscopedEnum : public QObject {
Q_OBJECT
QML_NAMED_ELEMENT(Data2)
Q_CLASSINFO("RegisterEnumClassesUnscoped", "true")
public:
enum class DType {
A = 26, B
};
Q_ENUM(DType)
enum EType {
C = 6, D
};
Q_ENUM(EType)
};
using uint_myown_t = decltype(75 - 12);
class UnknownUnderlyingType : public QObject
{
Q_OBJECT
QML_ELEMENT
public:
enum Bla : uint_myown_t {
Yo = 11,
};
Q_ENUM(Bla)
};
#endif // ENUMPROBLEMS_H
|