Добрый день!
Рисую таблицу(QGraphicsItemGroup), каждую ячейку представляю отдельным элементом(QGraphicsItem).
Соответственно таблицу добавляю в сцену(QGraphicsScene), ну а сцену отображаю через вьюху(QGraphicsView)
У каждой ячейки таблицы есть свой номер и хотелось по нажатию на ячейку отображать ее номер в консоли.
Т.е событие нажатия пробрасывается view ->scene->itemgroup->item
Но не получается достучаться до ячейки...
Не получается прокинуть сигнал до QGraphicsItem через QGraphicsItemGroup
View
C++ (Qt)
void View::mousePressEvent(QMouseEvent *event)
{
event->ignore();
qDebug() << "View " << event->pos();
QGraphicsView::mousePressEvent(event);
}
Scene
C++ (Qt)
Scene::Scene(QObject *parent) : QGraphicsScene(parent)
{
addItem(&table);
}
void Scene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << "Scene" << event->scenePos();
QGraphicsScene::mousePressEvent(event);
}
QGraphicsItemGroup
C++ (Qt)
Table::Table(QGraphicsItem * parent) : QGraphicsItemGroup(parent)
{
int k = 0;
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
addToGroup(&cells[i][j]);
cells[i][j].setPos(0 + i * cells[i][j].boundingRect().width(),
0 + j * cells[i][j].boundingRect().height()
);
cells[i][j].setnum(k++);
cells[i][j].setParentItem(this);
}
}
}
void Table::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
event->ignore();
qDebug() << "Table" << event->pos();
QGraphicsItemGroup::mousePressEvent(event);
}
QGraphicsItem
C++ (Qt)
Cell::Cell(QGraphicsItem * parent) : QGraphicsItem(parent)
{
number = 0;
}
void Cell::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option)
Q_UNUSED(widget)
painter->drawRect(0, 0, 40, 40);
painter->drawText(boundingRect() , QString("cell %1").arg(number, 0, 10));
}
QRectF Cell::boundingRect() const
{
return QRectF(0, 0, 40, 40);
}
void Cell::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << number;
}
При нажатии в консоль сваливается только такой вывод:
View QPoint(250,227)
Scene QPointF(184, 203)
Table QPointF(84, 103)
Table QPointF(84, 103)
Подскажите что делаю не так???