I created an object:
<code>class Button : public QObject, public QGraphicsPixmapItem
{
Q_OBJECT
</code>
<code>class Button : public QObject, public QGraphicsPixmapItem
{
Q_OBJECT
</code>
class Button : public QObject, public QGraphicsPixmapItem
{
Q_OBJECT
next I implemented a few functions:
<code>Button::Button()
: m_pressed(false)
{
m_buttonPixmap = PixmapManager::Instance()->getPixmap(PixmapManager::Button);
m_pressedButtonPixmap = PixmapManager::Instance()->getPixmap(PixmapManager::PressedButton);
setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable);
}
QRectF Button::boundingRect() const
{
return QRectF(-m_buttonPixmap.width() / 2.0f,
-m_buttonPixmap.height() / 2.0f,
m_buttonPixmap.width(),
m_buttonPixmap.height());
}
void Button::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
if (m_pressed) {
//painter->drawPixmap(0,0, m_pressedButtonPixmap);
}
else {
painter->setBrush(Qt::red);
painter->drawRect(boundingRect());
//painter->drawPixmap(0,0, m_buttonPixmap);
}
}
void Button::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << "pressed ";
m_pressed = true;
update();
QGraphicsPixmapItem::mousePressEvent(event);
}
void Button::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << "released ";
m_pressed = false;
update();
QGraphicsPixmapItem::mouseReleaseEvent(event);
}
</code>
<code>Button::Button()
: m_pressed(false)
{
m_buttonPixmap = PixmapManager::Instance()->getPixmap(PixmapManager::Button);
m_pressedButtonPixmap = PixmapManager::Instance()->getPixmap(PixmapManager::PressedButton);
setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable);
}
QRectF Button::boundingRect() const
{
return QRectF(-m_buttonPixmap.width() / 2.0f,
-m_buttonPixmap.height() / 2.0f,
m_buttonPixmap.width(),
m_buttonPixmap.height());
}
void Button::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
if (m_pressed) {
//painter->drawPixmap(0,0, m_pressedButtonPixmap);
}
else {
painter->setBrush(Qt::red);
painter->drawRect(boundingRect());
//painter->drawPixmap(0,0, m_buttonPixmap);
}
}
void Button::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << "pressed ";
m_pressed = true;
update();
QGraphicsPixmapItem::mousePressEvent(event);
}
void Button::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << "released ";
m_pressed = false;
update();
QGraphicsPixmapItem::mouseReleaseEvent(event);
}
</code>
Button::Button()
: m_pressed(false)
{
m_buttonPixmap = PixmapManager::Instance()->getPixmap(PixmapManager::Button);
m_pressedButtonPixmap = PixmapManager::Instance()->getPixmap(PixmapManager::PressedButton);
setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable);
}
QRectF Button::boundingRect() const
{
return QRectF(-m_buttonPixmap.width() / 2.0f,
-m_buttonPixmap.height() / 2.0f,
m_buttonPixmap.width(),
m_buttonPixmap.height());
}
void Button::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
if (m_pressed) {
//painter->drawPixmap(0,0, m_pressedButtonPixmap);
}
else {
painter->setBrush(Qt::red);
painter->drawRect(boundingRect());
//painter->drawPixmap(0,0, m_buttonPixmap);
}
}
void Button::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << "pressed ";
m_pressed = true;
update();
QGraphicsPixmapItem::mousePressEvent(event);
}
void Button::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << "released ";
m_pressed = false;
update();
QGraphicsPixmapItem::mouseReleaseEvent(event);
}
I also created a QGraphicsScene with Button item:
<code>MenuScene::MenuScene(QObject *parent)
: QGraphicsScene(parent)
{
setSceneRect(0,0, SCREEN::PHYSICAL_SIZE.width(), SCREEN::PHYSICAL_SIZE.height());
addItem(&m_startButton);
}
void MenuScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << "Scene pressed";
QGraphicsScene::mousePressEvent(event);
}
void MenuScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << "Scene released";
QGraphicsScene::mouseReleaseEvent(event);
}
</code>
<code>MenuScene::MenuScene(QObject *parent)
: QGraphicsScene(parent)
{
setSceneRect(0,0, SCREEN::PHYSICAL_SIZE.width(), SCREEN::PHYSICAL_SIZE.height());
addItem(&m_startButton);
}
void MenuScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << "Scene pressed";
QGraphicsScene::mousePressEvent(event);
}
void MenuScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << "Scene released";
QGraphicsScene::mouseReleaseEvent(event);
}
</code>
MenuScene::MenuScene(QObject *parent)
: QGraphicsScene(parent)
{
setSceneRect(0,0, SCREEN::PHYSICAL_SIZE.width(), SCREEN::PHYSICAL_SIZE.height());
addItem(&m_startButton);
}
void MenuScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << "Scene pressed";
QGraphicsScene::mousePressEvent(event);
}
void MenuScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << "Scene released";
QGraphicsScene::mouseReleaseEvent(event);
}
If I click on a button I got only information from MenuScene like “Scene pressed”/”Scene released”
I tried use:
m_startButton.setAcceptedMouseButtons(Qt::AllButtons);
m_startButton.setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable);
but without result.