QT QGraphicsScene Drawing Arc

QT QGraphicsScene Drawing Arc

本文关键字:Arc Drawing QGraphicsScene QT      更新时间:2023-10-16

我有一个关于在场景中绘制特定弧线的问题。我有关于arc的信息:

Koordinates开始,角度出发,端角,半径。

但是我不能在QPainter中有效地使用它们。实际上,我尝试QPainterPath使用形状来显示QGraphicsSceneaddPath(""),但我不能正常使用功能。我的问题是关于如何使用这些信息来绘制弧线以及如何在我的图形场景中显示它。

您可以使用QGraphicsEllipseItem添加椭圆,圆圈和段/弧到QGraphicsScene

QGraphicsEllipseItem* item = new QGraphicsEllipseItem(x, y, width, height);
item->setStartAngle(startAngle);
item->setSpanAngle(endAngle - startAngle);
scene->addItem(item);

不幸的是,QGraphicsEllipseItem只支持QPainter::drawEllipse()QPainter::drawPie()——后者可以用来绘制圆弧,但有一个副作用,总是有一条线从圆弧的开始和结束到中心。

如果你需要一个真弧,你可以创建QGraphicsEllipseItem的子类并覆盖paint()方法:

class QGraphicsArcItem : public QGraphicsEllipseItem {
public:
    QGraphicsArcItem ( qreal x, qreal y, qreal width, qreal height, QGraphicsItem * parent = 0 ) :
        QGraphicsEllipseItem(x, y, width, height, parent) {
    }
protected:
    void paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget) {
        painter->setPen(pen());
        painter->setBrush(brush());
        painter->drawArc(rect(), startAngle(), spanAngle());
//        if (option->state & QStyle::State_Selected)
//            qt_graphicsItem_highlightSelected(this, painter, option);
    }
};

您仍然需要处理项目突出显示,不幸的是qt_graphicsItem_highlightSelected是Qt库中定义的静态函数。