Страницы

Поиск по вопросам

воскресенье, 10 марта 2019 г.

Как заставить Qpainter рисовать на нужном виджете.

Есть форма, на которой много чего, включая один пустой виджет graphArea. QPainter создается следующим образом:
fPainter = new QPainter(ui->graphArea);
После чего рисую прямоугольник:
fPainter->begin(this); fPainter->setRenderHint(QPainter::Antialiasing);
fPainter->setBrush(QColor(255,255,255)); fPainter->drawRect(0,0,ui->graphArea->width(),ui->graphArea->height()); fPainter->end();
А рисуется он начиная от левого верхнего угла формы, а не на виджете. Как заставить его рисовать на виджете? На чем вообще лучше рисовать?
UPD: По совету @1101_debian пытаюсь рисовать теперь на QGraphicsView. Вот весь код paintEvent: fPainter = new QPainter(this); QGraphicsView *pGraphArea = ui->graphArea;
fPainter->begin(pGraphArea); fPainter->setRenderHint(QPainter::Antialiasing);
fPainter->setPen(Qt::black); fPainter->drawRect(pGraphArea->x(),pGraphArea->y(),pGraphArea->width(),pGraphArea->height());
for (int i= pGraphArea->x(); i < pGraphArea->width(); i += 96/2.54) for (int j = pGraphArea->y(); j < pGraphArea->height(); j += 96/2.54) fPainter->drawPoint(i,j);
fPainter->end(); event->ignore();
Получилось вот так:
т.е. рисуется, но опять же за пределами QGraphicsView. Что не так делаю?


Ответ

Попробуйте передать в fPainter->begin ваш виджет на котором вы хотите рисовать. fPainter->begin(ui->graphArea); А вообще я бы для этого использовал QGraphicsScene и QGraphicsView UPD. Официальный мануал от Nokia

Комментариев нет:

Отправить комментарий