【问题标题】:How to display dynamic circle using QPainter in Qt Creator如何在 Qt Creator 中使用 QPainter 显示动态圆圈
【发布时间】:2019-05-13 09:47:33
【问题描述】:

我不能显示一个动态的圆圈,以使其以中心(由红十字表示)为原点逐渐增长。 似乎从第二个圆开始,原点移动,因此圆不再从其中心扩大。 但是,如果第二个圆圈变得比前一个大,它将从其中心再次增长(如我所愿) 更新或清除方法都没有解决我的问题,你有什么想法吗?

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();
}

截图:

第一个中心圆

第二个不居中的圆

【问题讨论】:

    标签: c++ qpainter


    【解决方案1】:

    也许你的Cercle::advance 方法应该是这样的:

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

    (没有理由再次调整位置,也没有理由打电话给boundingRect)。

    请参阅related dcoumentation 以获取QRectF::adjust

    【讨论】:

      猜你喜欢
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      • 2018-06-17
      • 2013-03-01
      • 1970-01-01
      • 2015-07-06
      相关资源
      最近更新 更多