Qt Creator中如何使用QPainter显示动态圆圈
How to display dynamic circle using QPainter in Qt Creator
我无法显示一个动态圆圈,以使其以其中心(由红叉表示)为原点逐渐增大。
似乎从第二个圆开始,原点移动,因此圆不再从其中心扩大。
然而,如果第二个圆变得比前一个大,它会从中心再次增长(如我所愿)
update 或 clear 方法都没有解决我的问题,你有什么想法吗?
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();
}
截图:
第一个圆心圆
第二个非圆心圆
也许你的 Cercle::advance
方法应该是这样的:
void Cercle::advance(double a)
{
_geometry.adjust(-a, -a, a, a);
}
(没理由再调仓,也没理由叫boundingRect
).
参见 related dcoumentation QRectF::adjust
。
我无法显示一个动态圆圈,以使其以其中心(由红叉表示)为原点逐渐增大。 似乎从第二个圆开始,原点移动,因此圆不再从其中心扩大。 然而,如果第二个圆变得比前一个大,它会从中心再次增长(如我所愿) update 或 clear 方法都没有解决我的问题,你有什么想法吗?
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();
}
截图:
第一个圆心圆
第二个非圆心圆
也许你的 Cercle::advance
方法应该是这样的:
void Cercle::advance(double a)
{
_geometry.adjust(-a, -a, a, a);
}
(没理由再调仓,也没理由叫boundingRect
).
参见 related dcoumentation QRectF::adjust
。