Мой код рисует линию, которая состоит из нескольких сегментов и окружностей на вершинах.
void Line::paintLine(QPainter* painter, const std::vector<QPointF>& line)
{
QBrush brush(m_fillColor);
painter->setBrush(brush);
painter->setOpacity(m_opacity);
QPen pen(m_lineColor, 1);
painter->setPen(Qt::NoPen);
painter->drawEllipse(line[0], CircleRadius, CircleRadius);
for (int i = 1; i < line.size(); ++i)
{
painter->setPen(Qt::NoPen);
painter->drawEllipse(line[i], CircleRadius, CircleRadius);
painter->setPen(pen);
painter->drawLine(line[i-1], line[i]);
}
}
Я вызываю QPainter :: setPen много раз внутри цикла for. Это хорошо с точки зрения производительности? Является ли QPainter :: setPen быстрой функцией? (Я знаю, что переключение материала в 3D-графике - медленная операция, но, вероятно, это не так для 2D-чертежа с графическим интерфейсом.) Или, возможно, отдельные циклы более оптимальны?
void Line::paintLine(QPainter* painter, const std::vector<QPointF>& line)
{
QBrush brush(m_fillColor);
painter->setBrush(brush);
painter->setOpacity(m_opacity);
QPen pen(m_lineColor, 1);
painter->setPen(Qt::NoPen);
for (int i = 0; i < line.size(); ++i)
painter->drawEllipse(line[i], CircleRadius, CircleRadius);
painter->setPen(pen);
for (int i = 1; i < line.size(); ++i)
painter->drawLine(line[i-1], line[i]);
}