我试图通过在keyPressEvent函数中使用QTimer来移动一个圆圈(我的类继承了QGraphicsItem)。 这是我的班级:
class Shape :public QGraphicsObject
{
Q_OBJECT
public:
Shape();
QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
void keyPressEvent(QKeyEvent *event);
}
和boundingRect和paintfunction:
QRectF Shape::boundingRect() const
{
return QRectF(0,0,30,30);
}
void Shape::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
QRectF circle=boundingRect();
//painter->setClipRect( option->exposedRect );
QBrush brush(QColor(Qt::darkGreen));
painter->setPen(QColor(Qt::darkGreen));
painter->setBrush(brush);
painter->drawEllipse(circle);
}
这就是计时器的工作方式:
if(event->key()==Qt::Key_1){
if(!start){
timer->stop();
timer=NULL;
}
setScale(1);
timer=new QTimer(scene());
connect(timer,SIGNAL(timeout()),this,SLOT(moveRightLeft()));
timer->start(2);
start=false;
}
void Shape::moveRightLeft()
{
if(scene()->collidingItems(this).isEmpty()==true){//no collision
setPos(x()+dir,y());
}
else{
dir=-(dir);
setPos(x()+dir,y());
}
}
问题是当几秒钟后按下键时,圆圈的某些部分会丢失,具体取决于它的移动方向。即使prepareGeometryChange()和update()也不起作用。this is the shape of the circle while moving 谢谢你的帮助!