Qt4:絵を描く


Qt4:百の定石


絵を描く

Qt4 ではダブルバッファで絵が描かれるので paintEvent が発生した時に呼び出される関数 paintEvent() に直接絵を描けば良いようです。

  • paintEvent()が発生するたびに絵を描く。
  • paintEvent() はその窓が他の窓で隠された時などに発生する。
  • paintEvent() は repaint() でも呼び出せる。
  • 絵は QPainter で描く。
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) ;
}
  • JPEG に保存する
    pixmap.save("xxxx.jpg", "JPEG", 80) ;

#include <QPixmap>
#include <QPainter>
#include <QPen>
#include <QImage>