Как добавить дугу на передний план QGraphicsView - PullRequest
2 голосов
/ 13 сентября 2010

как можно добавить дугу QPainter на передний план QGraphicsView. Я нашел QGraphicsView.drawForeground (self, QPainter, QRectF), но я не понимаю, как его использовать. Я новичок в Qt. Я также знаю, что можно добавить искусство в QGraphicsScene, но мне нужна сцена для чего-то еще. Или есть более простой способ добавить дугу над сценой в QGraphicsView? Дуга должна быть переменной. Надеюсь, кто-нибудь может мне помочь.

1 Ответ

3 голосов
/ 15 сентября 2010

Вам нужно будет создать свой собственный подкласс QGraphicsView и реализовать метод drawForeground().Этот код можно использовать в качестве примера:

MyGraphicsView.h:

#ifndef MYGRAPHICSVIEW_H
#define MYGRAPHICSVIEW_H

#include <QGraphicsView>

class MyGraphicsView : public QGraphicsView
{
public:
    MyGraphicsView(QWidget * parent = 0);
    MyGraphicsView(QGraphicsScene * scene, QWidget * parent = 0);
    virtual ~MyGraphicsView();

protected:
    void drawForeground(QPainter * painter, const QRectF & rect);
};

#endif  /* MYGRAPHICSVIEW_H */

MyGraphicsView.cpp:

#include "MyGraphicsView.h"

MyGraphicsView::MyGraphicsView(QWidget * parent) :
    QGraphicsView(parent)
{
}

MyGraphicsView::MyGraphicsView(QGraphicsScene * scene, QWidget * parent) :
    QGraphicsView(scene, parent)
{
}

MyGraphicsView::~MyGraphicsView()
{
}

void MyGraphicsView::drawForeground(QPainter * painter, const QRectF & rect)
{
    int startAngle = 30 * 16;
    int spanAngle = 120 * 16;
    painter->drawArc(rect, startAngle, spanAngle);
}
...