I am trying to build a break-out game clone in Qt
. I need to figure out what type of a QGraphicsItem
my ball collided with. For example if I the ball collides with the wall, the ball just bounces off, if it collides with a brick it has to bounce off and destroys the brick. To find out what kind of QGraphicsItem
it is, I figured the best way to do that is probably to override QGraphicsItem::type()
(Please let me know if this is not the right way!).
In the following code for brick.h
I set my 'Brick' to have a Type of 3. Now, the value 3 looks really cumbersome to track. I would instead prefer to declare something with a '#define'
#include <QGraphicsItem>
//should this #define be here?
//#define BRICK_SPRITE 3
class Brick : public QGraphicsItem
{
public:
Brick(const QPixmap& p, QGraphicsScene *scene = 0);
virtual QRectF boundingRect() const;
virtual void paint( QPainter *painter,
const QStyleOptionGraphicsItem *option,
QWidget *widget );
QPainterPath shape() const;
enum { Type = 3 }; //enum {Type = BRICK_SPRITE}
int type() const { return Type; }
private:
QPixmap pixmap;
};
Where is a good location to place the statement '#define BRICK_SPRITE 3' ? I have several other files in the project. Should I place all the definitions in a separate header file?
Why not just use Type
instead of 3? enum
s in c++ are implicitly convertible to int
If you really wanted a new name instead, I suggest you use a const int
variable instead of a #define
-- it is type and namespace safe, while preprocessor macros aren't.
Something like:
class Brick : public QGraphicsItem
{
static const int BRICK_SPRITE = 3;
// rest of the class definition
};
According to the documentations I could find, the approach you are taking with the enum and overriding type()
is indeed the preferred way
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With