#ifndef PLAYINGCARD_H #define PLAYINGCARD_H #include #include class PlayingCard : public QObject { Q_OBJECT QML_ELEMENT QML_UNCREATABLE("Use C++ logic to instantiate") Q_ENUMS(Value) Q_ENUMS(Suit) Q_PROPERTY(Suit suit READ suit WRITE setSuit NOTIFY suitChanged REQUIRED) Q_PROPERTY(Value value READ value WRITE setValue NOTIFY valueChanged REQUIRED) Q_PROPERTY(QString valueString READ valueString NOTIFY valueChanged) Q_PROPERTY(QString suitString READ suitString NOTIFY suitChanged) 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(QObject* parent = nullptr, const Suit& suit = Suit::Clubs, const Value& value = Value::Ace); Suit suit() const; QString suitString() const; void setSuit(const Suit& suit); Value value() const; QString valueString() const; void setValue(const Value& value); QString toString() const; static QList createDeck(QObject* parent = nullptr); static bool areOppositeColors(const PlayingCard& card1, const PlayingCard& card2); signals: void suitChanged(); void valueChanged(); private: Suit m_suit; Value m_value; }; #endif // PLAYINGCARD_H