File: enumproblems.h

package info (click to toggle)
qt6-declarative 6.9.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 308,920 kB
  • sloc: cpp: 775,911; javascript: 514,247; xml: 10,855; python: 2,806; ansic: 2,253; java: 810; sh: 262; makefile: 41; php: 27
file content (134 lines) | stat: -rw-r--r-- 2,320 bytes parent folder | download
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