2

シーンに特定の弧を描くことについて質問があります。アークに関する次の情報があります。

開始座標、開始角度、終了角度、半径。

しかし、私はそれらを効率的に使用することはできませんQPainter。実際にQPainterPath形状を使って見せようとQGraphicsSceneしましaddPath("")たが、機能を適切に使用できません。私の質問は、この情報を使用して円弧を描く方法と、グラフィック シーンでそれを表示する方法についてです。

4

1 に答える 1

6

を使用しQGraphicsEllipseItemて、楕円、円、およびセグメント/円弧を に追加できますQGraphicsScene

試す

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

残念ながら、QGraphicsEllipseItem は and のみをサポート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 ライブラリ内で定義された静的関数です。

于 2013-01-11T13:38:37.770 に答える