У меня есть вопрос о рисовании определенной дуги на сцене. У меня есть эта информация о дуге:
Начальные координаты,
Начальный угол,
Конечный угол,
Радиус.
Но я не могу использовать их эффективно с QPainter
, На самом деле я пытался QPainterPath
использовать форму, чтобы показать на QGraphicsScene
с addPath("")
но я не могу правильно использовать функцию. Мои вопросы касаются того, как использовать эту информацию для рисования дуги и как показать ее на моей графической сцене.
Вы можете использовать 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.
Других решений пока нет …