Time for action – transforming the viewport

Let's extend our code so that all future operations focus only on drawing within the border boundaries after the border is drawn. Use the window and viewport transformation as follows:

void Widget::paintEvent(QPaintEvent *) {
  QPainter painter(this);
  painter.setRenderHint(QPainter::Antialiasing, true);
  QPen pen(Qt::black);
  pen.setWidth(4);
  painter.setPen(pen);
  QRect r = rect().adjusted(10, 10, -10, -10);
  painter.drawRoundedRect(r, 20, 10);
  painter.save();
  r.adjust(2, 2, -2, -2);
  painter.setViewport(r);
  r.moveTo(0, -r.height()/2);
  painter.setWindow(r);
  drawChart(&painter, r);
  painter.restore();
}

Also create a protected method called drawChart():

void Widget::drawChart(QPainter *painter, const QRect ...

Get Game Programming Using Qt now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.