Animacja działa tylko podczas poruszania oknem, tajemnicze artefakty :O

0
#ifndef MYITEM_H
#define MYITEM_H
#include <QPainter>
#include <QPaintEvent>
#include <QGraphicsScene>
#include <QGraphicsItem>
#include <QGraphicsView>
#include <QPaintEvent>
#include <QObject>

#include "/home/maciek/Pulpit/C++/obiektowo/rzut.h"
class MyItem : public QGraphicsItem
{


public:
	MyItem();
	QRectF boundingRect() const;
	void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
	ball *ba;
	QBrush Brush;

 void move();


protected:


};


#endif // MYITEM_H

#include "myitem.h"
#include "dialog.h"
#include <QDebug>
MyItem::MyItem()
{
	ba=new ball();


	ba->set_posi(0,0);
	ba->set_velo(1,1);
	setPos(ba->show_px(),ba->show_py());



}

void MyItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{

	QRectF rec = boundingRect();
	QBrush Brush(Qt::black);
	painter->translate(10,(scene()->height()-2*y()-10));
	painter->scale(1,-1);
	painter->drawRect(rec);
	painter->fillRect(rec,Brush);
	qDebug()<<"px:"<<ba->show_px()<<"py:"<<ba->show_py();
}

void MyItem::move()
{
	ba->move();
	setPos(ba->show_px(),ba->show_py());

}



QRectF MyItem::boundingRect() const
{
	return QRect(0,0,100,100);

}

Piszę program mający symulować ruch, dzielę go na frontend w qt i backend w czystym c++, problem w tym że, natrafiłem na dziwne zachowanie. Szukałem rozwiązania kilka godzin z marnym skutkiem :(

Prostokąt zmienia pozycję skokowo i tylko podczas poruszania całym oknem, co tego zostawia artefakty. Próbowałem prepareGeometryChange() jak pisali na Stacku ale nie pomogło. Czego to może być wina?

0

Prostokąt zmienia pozycję skokowo i tylko podczas poruszania całym oknem,

Brzmi jakby brakowało wywołania repaint().

0

Jak wstawię qDebug()<<show_px(); do move() wtedy widać że, przycina wypisywanie

0

Zagadka rozwiązana, w pliczku dialog.cpp brakowało view->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
:)

0
Zeszyt_w_kratkę napisał(a):

Zagadka rozwiązana, w pliczku dialog.cpp brakowało view->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
:)

To jest zła powiedź.
Twój kod powinien działać bez względu na tą wartość. Po prostu wyłączyłeś jakąś optymalizację, przez co błąd w kodzie zostaje ukryty.

Z tego co widzę, to nie widać kodu powodujący ten błąd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1