Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QPaint::setPen功能是否昂贵?_Qt_User Interface_Qt5_2d - Fatal编程技术网

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]);
}

当然,换笔也没那么贵。但如果可能的话,分开你的循环,尽量减少笔的变化。更改画笔时,将设置一个标志,在该标志中,将强制在下一个绘制命令之前完成潜在任务。您应该在自己的实现中分析它,以查看通过分离循环可以节省多少微秒。

您是否尝试分析代码?