Некоторые части Qrect отсутствуют

Я пытаюсь переместить круг (мой класс наследует QGraphicsItem) с помощью QTimer в функции keyPressEvent. вот мой класс:

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() не работали. это форма круга во время движения, спасибо за вашу помощь!

0 ответов

Другие вопросы по тегам