Qt QPaint::setPen功能是否昂贵?
我的代码在顶点上绘制了一条由多个线段和圆组成的直线Qt QPaint::setPen功能是否昂贵?,qt,user-interface,qt5,2d,Qt,User Interface,Qt5,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);
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]);
}
}
void Line::paintLine(QPainter*painter,const std::vector&Line)
{
QBrush刷(m_fillColor);
画家->挫折(画笔);
画师->设置不透明度(m_不透明度);
QPen笔(m_lineColor,1);
画师->设置笔(Qt::NoPen);
画家->抽屉(第[0]行,圆圈,圆圈);
对于(int i=1;i设置笔(Qt::NoPen);
画家->抽屉(第[i]行,圆圈,圆圈);
画师->画笔(画笔);
油漆工->拉线(线[i-1],线[i]);
}
}
我在for循环中多次调用QPainter::setPen。这个性能好吗?QPaint::setPen是否具有快速功能?(我知道3D图形中的材质切换操作很慢,但对于2D GUI图形可能不是这样。)
或者单独的循环更为理想
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]);
}
void Line::paintLine(QPainter*painter,const std::vector&Line)
{
QBrush刷(m_fillColor);
画家->挫折(画笔);
画师->设置不透明度(m_不透明度);
QPen笔(m_lineColor,1);
画师->设置笔(Qt::NoPen);
对于(int i=0;i抽屉(第[i]行,圆圈,圆圈);
画师->画笔(画笔);
对于(int i=1;i拉线(线[i-1],线[i]);
}
当然,换笔也没那么贵。但如果可能的话,分开你的循环,尽量减少笔的变化。更改画笔时,将设置一个标志,在该标志中,将强制在下一个绘制命令之前完成潜在任务。您应该在自己的实现中分析它,以查看通过分离循环可以节省多少微秒。您是否尝试分析代码?