首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在QPainter中使用QPainter显示动态循环

如何在QPainter中使用QPainter显示动态循环
EN

Stack Overflow用户
提问于 2019-05-13 09:47:33
回答 1查看 477关注 0票数 1

我不能展示一个动态的圆圈来使它逐渐成长,它的中心(用红十字会表示)是它的起源点。似乎从第二个圆开始,起源点移动,因此圆不再从其中心扩大。但是,如果第二个圆比前一个圆变大了,它将从它的中心(正如我想要的那样)再次增长更新或清晰的方法没有解决我的问题,你有什么想法吗?

MainWindow.cpp:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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();
}

截图:

第一中心圆

2非中心圆

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-13 10:29:20

也许您的Cercle::advance方法应该如下所示:

代码语言:javascript
复制
void Cercle::advance(double a)
{
    _geometry.adjust(-a, -a, a, a);
}

(没有理由再次调整位置,也没有理由调用boundingRect)。

参见相关沉降中的QRectF::adjust

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56109783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档