Manage playing cards from C++ only
This commit is contained in:
parent
bfa876f87f
commit
e3242b71e9
|
@ -21,7 +21,8 @@ qt_add_qml_module(appSolitare
|
||||||
QML_FILES
|
QML_FILES
|
||||||
Main.qml
|
Main.qml
|
||||||
QML_FILES ScoreBar.qml
|
QML_FILES ScoreBar.qml
|
||||||
QML_FILES PlayingCard.qml
|
QML_FILES CardModel.qml
|
||||||
|
SOURCES playingcard.h playingcard.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
|
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
|
||||||
|
|
|
@ -1,24 +1,24 @@
|
||||||
|
import Solitare
|
||||||
import QtQuick
|
import QtQuick
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
id: playingCard
|
id: cardModel
|
||||||
width: 100
|
width: 100
|
||||||
height: width * 1.4 // Maintian the aspect ratio of a playing card
|
height: width * 1.4 // Maintian the aspect ratio of a playing card
|
||||||
|
|
||||||
|
required property PlayingCard card;
|
||||||
|
property string backStyle: "red"
|
||||||
|
|
||||||
// Annoyingly, there is no easy way to make this type-safe, QML does have enums
|
// Annoyingly, there is no easy way to make this type-safe, QML does have enums
|
||||||
// but they only act as ints, and since we need the string names for the img paths
|
// but they only act as ints, and since we need the string names for the img paths
|
||||||
// anyways, typing these as simple strings is the easiest way to do this.
|
// anyways, typing these as simple strings is the easiest way to do this.
|
||||||
required property string color
|
|
||||||
required property string value
|
|
||||||
property string backStyle: "red"
|
|
||||||
property bool isFaceDown: false
|
|
||||||
|
|
||||||
Image {
|
Image {
|
||||||
id: cardImage
|
id: cardImage
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
source: playingCard.isFaceDown
|
source: cardModel.card.isFaceDown
|
||||||
? "qrc:/img/playing_cards/backs/" + playingCard.backStyle + ".svg"
|
? "qrc:/img/playing_cards/backs/" + cardModel.backStyle + ".svg"
|
||||||
: "qrc:/img/playing_cards/fronts/" + playingCard.color + "_" + playingCard.value + ".svg"
|
: "qrc:/img/playing_cards/fronts/" + cardModel.card.color + "_" + cardModel.card.value + ".svg"
|
||||||
fillMode: Image.PreserveAspectFit
|
fillMode: Image.PreserveAspectFit
|
||||||
}
|
}
|
||||||
}
|
}
|
8
Main.qml
8
Main.qml
|
@ -1,3 +1,4 @@
|
||||||
|
import Solitare
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
import QtQuick.Layouts
|
import QtQuick.Layouts
|
||||||
|
@ -17,9 +18,8 @@ ApplicationWindow {
|
||||||
moves: 64
|
moves: 64
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayingCard {
|
CardModel {
|
||||||
color: "clubs"
|
anchors.centerIn: parent
|
||||||
value: "ace"
|
card: myCard
|
||||||
isFaceDown: true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
8
main.cpp
8
main.cpp
|
@ -1,5 +1,7 @@
|
||||||
#include <QGuiApplication>
|
#include <QGuiApplication>
|
||||||
#include <QQmlApplicationEngine>
|
#include <QQmlApplicationEngine>
|
||||||
|
#include <QQmlContext>
|
||||||
|
#include "playingcard.h"
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
@ -12,6 +14,12 @@ int main(int argc, char *argv[])
|
||||||
&app,
|
&app,
|
||||||
[]() { QCoreApplication::exit(-1); },
|
[]() { QCoreApplication::exit(-1); },
|
||||||
Qt::QueuedConnection);
|
Qt::QueuedConnection);
|
||||||
|
|
||||||
|
qmlRegisterUncreatableType<PlayingCard>("Solitare", 1, 0, "PlayingCard", "PlayingCard cannot be directly created in QML. Use C++ logic to instantiate.");
|
||||||
|
|
||||||
|
PlayingCard myCard("clubs", "ace");
|
||||||
|
engine.rootContext()->setContextProperty("myCard", &myCard);
|
||||||
|
|
||||||
engine.loadFromModule("Solitare", "Main");
|
engine.loadFromModule("Solitare", "Main");
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
|
|
47
playingcard.cpp
Normal file
47
playingcard.cpp
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
#include "playingcard.h"
|
||||||
|
|
||||||
|
PlayingCard::PlayingCard(const QString &color, const QString &value, bool isFaceDown, QObject *parent)
|
||||||
|
: QObject{parent}, m_color{color}, m_value{value}, m_isFaceDown{isFaceDown}
|
||||||
|
{ }
|
||||||
|
|
||||||
|
QString PlayingCard::color() const
|
||||||
|
{
|
||||||
|
return m_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayingCard::setColor(const QString &color)
|
||||||
|
{
|
||||||
|
if (m_color == color)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_color = color;
|
||||||
|
emit onColorChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString PlayingCard::value() const
|
||||||
|
{
|
||||||
|
return m_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayingCard::setValue(const QString &value)
|
||||||
|
{
|
||||||
|
if (m_value == value)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_value = value;
|
||||||
|
emit onValueChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PlayingCard::isFaceDown() const
|
||||||
|
{
|
||||||
|
return m_isFaceDown;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayingCard::setIsFaceDown(bool faceDown)
|
||||||
|
{
|
||||||
|
if (m_isFaceDown == faceDown)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_isFaceDown = faceDown;
|
||||||
|
emit onIsFaceDownChanged();
|
||||||
|
}
|
37
playingcard.h
Normal file
37
playingcard.h
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
#ifndef PLAYINGCARD_H
|
||||||
|
#define PLAYINGCARD_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class PlayingCard : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(QString color READ color WRITE setColor NOTIFY onColorChanged REQUIRED)
|
||||||
|
Q_PROPERTY(QString value READ value WRITE setValue NOTIFY onValueChanged REQUIRED)
|
||||||
|
Q_PROPERTY(bool isFaceDown READ isFaceDown WRITE setIsFaceDown NOTIFY onIsFaceDownChanged)
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit PlayingCard(const QString &color = "", const QString &value = "", bool isFaceDown = false, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
QString color() const;
|
||||||
|
void setColor(const QString &color);
|
||||||
|
|
||||||
|
QString value() const;
|
||||||
|
void setValue(const QString &value);
|
||||||
|
|
||||||
|
bool isFaceDown() const;
|
||||||
|
void setIsFaceDown(bool faceDown);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void onColorChanged();
|
||||||
|
void onValueChanged();
|
||||||
|
void onIsFaceDownChanged();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString m_color;
|
||||||
|
QString m_value;
|
||||||
|
bool m_isFaceDown;
|
||||||
|
QString m_imgUrl;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // PLAYINGCARD_H
|
Loading…
Reference in a new issue