Введение в разработку приложений на платформе Atom/MeeGo. Граничин О.Н - 104 стр.

UptoLike

104
static const QPoint hourHand[3] = {
QPoint(7, 8),
QPoint(-7, 8),
QPoint(0, -40)
};
static const QPoint minuteHand[3] = {
QPoint(7, 8),
QPoint(-7, 8),
QPoint(0, -70)
};
QColor hourColor(127, 0, 127);
QColor minuteColor(0, 127, 127, 191);
int side = qMin(width(), height());
QTime time = QTime::currentTime();
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.translate(width() / 2, height() / 2);
painter.scale(side / 200.0, side / 200.0);
}
Обрезание
Методы класса QPainter позволяют обрезать любую операцию рисования по границе
прямоугольника, области или векторного пути. Управление текущими границами обрезания может
осуществляться с помощью функций clipRegion() и clipPath().
После обрезания QPainter, устройство рисованию также может обрезать. Например, большинство
границ обрезания виджетов вне границ обрезания дочерних виджетов, а большинство границ
обрезания принтеров находятся далеко от областей обрезания виджетов около границ бумаги. Эти
дополнительные границы обрезания не отражаются в значении, возвращаемом clipRegion() или
hasClipping().
Рисование сложных фигур
Если необходимо нарисовать сложную фигуруособенно, если необходимо это делать
неоднократно, есть смысл создать экземпляр класса QPainterPath и рисовать, используя метод
drawPath().
Небольшой пример:
QPainterPath path;
path.addRect(20, 20, 60, 60);
path.moveTo(0, 0);
path.cubicTo(99, 0, 50, 50, 99, 99);
path.cubicTo(0, 99, 50, 50, 0, 0);
QPainter painter(this);
painter.fillRect(0, 0, 100, 100, Qt::white);
painter.setPen(QPen(QColor(79, 106, 25), 1, Qt::SolidLine,
Qt::FlatCap, Qt::MiterJoin));
painter.setBrush(QColor(122, 163, 39));
painter.drawPath(path);