QWidget* QGraphicsViewAdapter::getWidgetAt(const QPoint& pos) { QWidget* childAt = _graphicsView->childAt(pos); if(childAt) { return childAt; } QGraphicsItem* item = _graphicsView->itemAt(pos); if(item && item->contains(item->mapFromScene(pos))) { QGraphicsProxyWidget* p = dynamic_cast<QGraphicsProxyWidget*>(item); if(p) { childAt = p->widget(); QWidget* c; while( (c = childAt->childAt(childAt->mapFromGlobal(pos)))!=0 ) { childAt = c; } return childAt; } } return NULL; }
void CalendarGraphicsItem::mouseReleaseEvent(QGraphicsSceneMouseEvent * event) { QGraphicsItem * item; for(int i = 0; i < 42; ++i) { item = _items[QString("day%1").arg(i)]; if(item && item->contains(item->mapFromScene(event->scenePos()))) { QDate firstMonthDay = QDate(_selectedDay.year(), _selectedDay.month(), 1); QDate firstCalendarDay = firstMonthDay.addDays(firstMonthDay.dayOfWeek() * -1); if(firstMonthDay.dayOfWeek() < 2) firstCalendarDay = firstCalendarDay.addDays(-7); setSelectedDay(firstCalendarDay.addDays(i)); return; } } }