На этом шаге рассмотрим рисование линий.
Для рисования отрезка прямой линии из одной точки в другую используется метод drawLine(), в который передаются координаты начальной (x1, y1) и конечной (x2, y2) точек QPointF (рис. 1). Координаты начальной точки определяются значениями при щелчке левой кнопкой мыши, а координаты конечной точки - при передвижении курсора при нажатой левой кнопке мыши.

Рис.1. Линия
QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); painter.drawLine(QPointF(x1, y1), QPointF(x2, y2));
Файлы приложения можно взять здесь.
Метод drawPolyLine() проводит линию, которая соединяет точки, передаваемые в первом параметре. Второй параметр задает количество точек, которые должны быть соединены (т. е. число элементов массива). Первая и последняя точки не соединяются. Нарисуем фигуру, показанную на рис. 2.

Рис.2. Соединение точек линиями
QPointF a[n];
for (int i = 0; i < n; ++i)
{
qreal fAngle = 2 * 3.14 * i / n;
qreal x = 100 + cos(fAngle) * 60;
qreal y = 100 + sin(fAngle) * 60;
a[i] = QPointF(x, y);
}
painter.drawPolyline(a, n);Файлы приложения можно взять здесь.
В примере к рис. 2 значения точек вычисляются по формулам. Рассморим пример использования метода drawPolyLine() в случае, когда координаты точек задаются щелчком мыши в окне приложения (рис. 3).

Рис.3. Соединение произвольных точек линиями
class DrPoint : public QWidget {
float x1,y1,x2,y2;
int n=0;
QPointF a[100];
protected:
virtual void paintEvent(QPaintEvent*)
{
QPainter painter(this);
int r,g,b;
QTime midnight(0,0,0);
qsrand(midnight.secsTo(QTime::currentTime()));
r=qrand()%255;
g=qrand()%255;
b=qrand()%255;
painter.setPen(QPen(QColor(r,g,b,255), 10));
painter.setRenderHint(QPainter::Antialiasing, true);
painter.drawPolyline(a, n);
}
virtual void mousePressEvent(QMouseEvent *pe)
{
x1=pe->x();
y1=pe->y();
a[n] = QPointF(x1, y1);
n++;
update();
}
public:
DrPoint(QWidget* pwgt = 0) : QWidget(pwgt)
{
}
};Файлы приложения можно взять здесь.
На следующем шаге рассмотрим рисование сплошных прямоугольников.