#qt #cpp
Есть форма, на которой много чего, включая один пустой виджет 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. Что не так делаю?
Ответы
Ответ 1
Попробуйте передать в fPainter->begin ваш виджет на котором вы хотите рисовать. fPainter->begin(ui->graphArea); А вообще я бы для этого использовал QGraphicsScene и QGraphicsView. UPD. Официальный мануал от NokiaОтвет 2
Вы про это или нет, но у QWidget есть такой классный метод, как render(): void QWidget::render( QPaintDevice * target, const QPoint & targetOffset = QPoint(), const QRegion & sourceRegion = QRegion(), RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren) ) Самое прямое применение (пример из Qt Assistant): QPainter painter(this); // ... painter.end(); myWidget->render(this); Рисует или нет не проверял, но весь виджет в QPainter передаётся исправно. Лично я передавал на печать(через класс QPrinter) целый виджет: QPrinter *printer = new QPrinter(QPrinter::HighResolution); printer->setPageSize(QPrinter::A4); printer->setOrientation(QPrinter::Portrait); printer->setPageMargins (15,15,15,15,QPrinter::Millimeter); printer->setFullPage(true); printer->setOutputFileName("output.pdf"); printer->setOutputFormat(QPrinter::PdfFormat); QPainter *painter = new QPainter; painter->begin(printer); QRect view(0,0,printer->pageRect().width(),printer->paperRect().height()); painter->setViewport(view); painter->scale(10.0,10.0); painter->setRenderHint(QPainter::Antialiasing); this->render(painter); painter->end();
Комментариев нет:
Отправить комментарий