Как отобразить динамический круг с помощью QPainter в Qt Creator - PullRequest
1 голос
/ 13 мая 2019

Я не могу отобразить динамический круг для того, чтобы он постепенно увеличивался с центром (указанным красным крестом) в качестве исходной точки.Казалось бы, начиная со второго круга, точка начала смещения и, следовательно, круг больше не расширяется от своего центра.Однако, если второй круг станет больше предыдущего, он снова вырастет из своего центра (как я хочу). Методы обновления или очистки не решили мою проблему, у вас есть идеи?

MainWindow.cpp:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->graphicsView->setScene(&_scene);
    _cercle = new Cercle(0,0,1,1);
    _scene.addItem(&*_cercle);
    connect(&_animationTimer,SIGNAL(timeout()),this,SLOT(progressAnimation()));
    _animationTimer.setInterval(1);
    _animationTimer.start();
    tps = 1;
    a = 0;
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::progressAnimation()
{
    tps++;
    a= a+0.2;
    if(tps%1000==0)
    {
       a=0;
      _cercle = new Cercle(0,0,1,1);
      _scene.addItem(&*_cercle);

    }
    _cercle->advance(a);

}

Cercle.cpp:

Cercle::Cercle(double x=0, double y=0,double size =0, double size2 = 0)
{
    _geometry = QRectF(x,y,size,size2);
}
QRectF Cercle::boundingRect()const
{
    return _geometry;
}
void Cercle::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    painter->setPen(Qt::white);
    painter->drawEllipse(_geometry);
}
void Cercle::advance(double a)
{
    _geometry = QRectF(0-a,0-a,0+a,0+a);
    this->setPos(0+a,0+a);
    this->boundingRect();
}

Скриншоты:

1-й круг по центру

1st centered circle

2-й нецентрированный круг

2nd not centered circle

1 Ответ

0 голосов
/ 13 мая 2019

Может быть, ваш метод Cercle::advance должен выглядеть примерно так:

void Cercle::advance(double a)
{
    _geometry.adjust(-a, -a, a, a);
}

(нет причин для повторной настройки позиции и нет причины для вызова boundingRect).

См. Связанная документация для QRectF::adjust.

...