Qt4 ではダブルバッファで絵が描かれるので paintEvent が発生した時に呼び出される関数 paintEvent() に直接絵を描けば良いようです。
void PaintWindow::draw() { QPainter painter(this) ; painter.setPen(Qt::blue); painter.setFont(QFont("Arial", 60)); painter.drawText(rect(), Qt::AlignCenter, "Qt"); painter.drawRect(100, 100, 200, 100) ; } void PaintWindow::paintEvent(QPaintEvent *) { draw() ; }
バッファー(QPixmap)に描く方法ものせます。
PaintWindow::PaintWindow(QWidget* parent) : QWidget(parent) { setGeometry( 100, 50, 400, 300 ) ; setFixedSize(size()) ; gWorld = new QPixmap(size()) ; // QPixmap gWorld->fill(this, 0, 0) ; // デフォルトカラーで塗りつぶす qp = new QPainter(gWorld); draw() ; } void PaintWindow::draw() { qp->setPen(Qt::blue); qp->setFont(QFont("Arial", 60)); qp->drawText(rect(), Qt::AlignCenter, "Qt"); qp->drawRect(100, 100, 200, 100) ; } void PaintWindow::paintEvent(QPaintEvent *) { QPainter qpp(this) ; //動的に取ってはいけないみたい qpp.drawPixmap(0, 0, *gWorld) ; }
pixmap.save("xxxx.jpg", "JPEG", 80) ;
#include <QPixmap> #include <QPainter> #include <QPen> #include <QImage>