#ifndef PLAYINGCARD_H #define PLAYINGCARD_H #include class PlayingCard : public QObject { Q_OBJECT Q_ENUMS(Value) Q_ENUMS(Suit) Q_PROPERTY(Suit suit READ suit WRITE setSuit NOTIFY onSuitChanged REQUIRED) Q_PROPERTY(Value value READ value WRITE setValue NOTIFY onValueChanged REQUIRED) Q_PROPERTY(QString valueString READ valueString NOTIFY onValueChanged) Q_PROPERTY(QString suitString READ suitString NOTIFY onSuitChanged) public: enum Value { Ace = 1, Two = 2, Three = 3, Four = 4, Five = 5, Six = 6, Seven = 7, Eight = 8, Nine = 9, Ten = 10, Jack = 11, Queen = 12, King = 13, }; enum Suit { Clubs, Diamonds, Hearts, Spades, }; explicit PlayingCard(const Suit &suit = Suit::Clubs, const Value &value = Value::Ace, QObject *parent = nullptr); Suit suit() const; QString suitString() const; void setSuit(const Suit &suit); Value value() const; QString valueString() const; void setValue(const Value &value); static QList createDeck(); signals: void onSuitChanged(); void onValueChanged(); private: Suit m_suit; Value m_value; }; #endif // PLAYINGCARD_H