LINUX.ORG.RU

[Qt] Рисование во View напрямую

 


0

0

Нужно создать класс, который действовал бы аналогично QRubberBand. То есть чтобы его можно было создавать во вьюпорте View и изменять его параметры (размер, позицию), не заботясь о его перерисовке (чтобы он при этом сам перерисовывался).

Можете привести пример для, например, эллписа (и чтоб описывался он, по традиции Qt, как QRect). Использовать хочется по некоторой аналогии с QRubberBand:

В хедере View делаю:

QPoint m_origin;
AbstractRubberBand* m_rubberband;

И используется в этом View оно так:

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'ы или сигналы изменения позиции одного из его точек, потом опять же прячем его, получаем shape и удаляем его.

От чего танцевать, что наследовать?

★★★★★

наследовать знания из книжек и начинать уже писать хоть что-то самому

anonymous
()
Ответ на: комментарий от anonymous

Наследовать QWidget, использовать QPaintEvent. Неужели сложно ответить было? Всё там очень просто и понятно, просто надо было знать, куда смотреть.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

Скажи честно, ты перед тем, как открыть QtAssistant пишеш вопрос сюда и потом соревнуешься в скорости нахождения ответа с ЛОРом?

anonymous
()
Ответ на: комментарий от anonymous

мне сказали волшебное слово «QPaintEvent» в другом месте, остальное стало ясно из ассистанта и гугля.

Obey-Kun ★★★★★
() автор топика

Да, есть там такой ньюанс, что начиная с какой-то версии Qt - рисовать на виджете можно ТОЛЬКО в paint event. Хотя рисование в QPixmap в любом месте программы не отменяли :)

I-Love-Microsoft ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.