Шаг 202.
Библиотека Qt.
Рисование линий

    На этом шаге рассмотрим рисование линий.

    Для рисования отрезка прямой линии из одной точки в другую используется метод 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)
    {
    }
};

    Файлы приложения можно взять здесь.

    На следующем шаге рассмотрим рисование сплошных прямоугольников.




Предыдущий шаг Содержание Следующий шаг