#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();
Комментариев нет:
Отправить комментарий