Game Programming Using Qt Beginner's Guide
上QQ阅读APP看书,第一时间看更新

Time for action – adding properties to the board class

In this exercise, we will be adding a useful property to the board class. The property is going to hold information about the player who should make the next move. The type of the property is going to be the TicTacToeWidget::Player enumeration that we created earlier. For the getter and the setter methods, we are going to use the two functions that we created earlier: currentPlayer() and setCurrentPlayer().

Open the header file for our class and modify the class definition as shown in the following code:

class TicTacToeWidget : public QWidget {
  Q_OBJECT
 Q_ENUMS(Player)
 Q_PROPERTY(Player currentPlayer READ currentPlayer
 WRITE setCurrentPlayer
 NOTIFY currentPlayerChanged)
public:
  enum Player { Invalid, Player1, Player2, Draw };

What just happened?

Since we want to use an enumeration as a type of a property, we have to inform Qt's meta-object system about the enum. This is done with the Q_ENUMS macro. Then, we declare a property called currentPlayer and mark our two existing methods as getter and setter for the property. We also use the NOTIFY keyword to mark currentPlayerChanged as a signal that is sent to inform about a change in the value of the property. We won't be using this extra information in our small game, and we don't require currentPlayer to be a property at all, but it is always a good idea to try and find good candidates for properties and expose them because some day, someone might want to use our class in a way we hadn't predicted and a particular property might become useful.