Можете привести пример для, например, эллписа (и чтоб описывался он, по традиции Qt, как QRect). Использовать хочется по некоторой аналогии с QRubberBand:
В хедере View делается
QPoint m_origin;
AbstractRubberBand m_rubberband;
Использовать хочу так:
void Widget::mousePressEvent(QMouseEvent *event)
{
m_origin = event->pos();
if (m_rubberband == NULL) {
m_rubberband = new (m_instrument == Ellipse ? EllipseRubberBand(this) : RectangleRubberBand(this) );
}
m_rubberband->setGeometry(QRect(origin, QSize()));
m_rubberband->show();
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
if (m_rubberban != NULL) {
m_rubberband->setGeometry(QRect(origin, event->pos()).normalized());
}
}
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
if (m_rubberban != NULL) {
m_rubberband->hide();
// делаем что надо с полученной фигурой и удаляем m_rubberband
}
}
Также нужен инструмент полигональной линии — в него последовательно (сигналами или ещё как) отправляются QPointF'ы или сигналы изменения позиции одного из QPointF, потом удаляем его и получаем shape.
Итак, что наследовать, что переопределять?
Опечатка, в хедер хочу делать так
QPoint m_origin;
AbstractRubberBand *m_rubberband;