我有一个LifeView
继承自的类,QGraphicsView
用于渲染场景LifeScene
(继承自QGraphicsScene
)。元素LifeCell
(继承自QGraphicsRectItem
)绘制在舞台上。
有LifeCell
一个覆盖的鼠标点击处理方法
void LifeCell::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
// Если клетка живая была до нажатия, то перекрашиваем и делаем её мертвой
changeStatus((currentStatus == C_ALIVE) ? C_DIED : C_ALIVE);
qDebug() << "LifeCell: pressed";
QGraphicsRectItem::mousePressEvent(event);
}
我所有LifeCell
的元素都在QGraphicsItemGroup
.
但是在应用程序的输出中只有这个:
LifeView: pressed
虽然从理论上讲,它也应该是:
LifeCell: pressed
好的,我试着按照网上写的去做:
void LifeView::mousePressEvent(QMouseEvent *event)
{
qDebug() << "LifeView: pressed";
QGraphicsView::mousePressEvent(event);
event->accept();
}
向 LifeView 添加了以下行:
this->setMouseTracking(true);
什么也没有变。我究竟做错了什么?
upd添加到一个组对我来说就是这样。
m_itemGroup = new QGraphicsItemGroup();
this->addItem(m_itemGroup);
LifeCell *pCell = nullptr;
for (size_t i = 0; i < rowCount; i++)
{
for (size_t j = 0; j < colCount; j++)
{
QRectF rect;
// Вычисление координат клетки
qreal x = j * cellSize;
qreal y = i * cellSize;
rect.setX(x); rect.setY(y);
rect.setWidth(cellSize); rect.setHeight(cellSize);
pCell = new LifeCell(rect);
m_itemGroup->addToGroup(pCell);
}
}