QT QGraphicsScene Drawing Arc

У меня есть вопрос о рисовании определенной дуги на сцене. У меня есть эта информация о дуге:

Начальные координаты,
Начальный угол,
Конечный угол,
Радиус.

Но я не могу использовать их эффективно с QPainter, На самом деле я пытался QPainterPath использовать форму, чтобы показать на QGraphicsScene с addPath("") но я не могу правильно использовать функцию. Мои вопросы касаются того, как использовать эту информацию для рисования дуги и как показать ее на моей графической сцене.

1

Решение

Вы можете использовать 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.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]