Здравствуйте.
Начал изучать QGraphicsView и QGraphicsScene.
Написал простой пример отрисовки кругов и по замыслу, когда тыкну на экран, все итемы переместятся в позицию курсора, вот только не выходит.
В чем ошибка?
PS. на скрине в консоле показана позиция курсора и всех итемов, но то что на окне как то не соответствуется....
h:
class UGravitation: public QGraphicsView
{
Q_OBJECT
public:
UGravitation(QWidget *parent = 0);
private:
void createGUI();
void init();
protected:
void mousePressEvent(QMouseEvent *event);
};
Cpp:
#include "UGravitation.h"
/// PUBLIC
UGravitation::UGravitation(QWidget *parent)
: QGraphicsView(parent)
{
createGUI();
init();
}
/// PRIVATE
void UGravitation::createGUI()
{
setRenderHints(QPainter::Antialiasing);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setAlignment(Qt::AlignLeft);
setScene(new QGraphicsScene());
scene()->setSceneRect(0, 0, 400, 400);
}
void UGravitation::init()
{
QSizeF sizeBalls(20, 20);
for(int i = 0; i < 10; i++)
{
QGraphicsEllipseItem *ball = new QGraphicsEllipseItem();
double x = qrand() % (int)(scene()->width() - sizeBalls.width() * 2);
double y = qrand() % (int)(scene()->height() - sizeBalls.height() * 2);
ball->setPos(x, y);
ball->setRect(QRectF(ball->pos(), sizeBalls));
int r = rand() % 255;
int g = rand() % 255;
int b = rand() % 255;
int alpha = 255;
ball->setBrush(QColor(r, g, b, alpha));
ball->setPen(QPen(Qt::NoPen));
scene()->addItem(ball);
}
}
/// PROTECTED
void UGravitation::mousePressEvent(QMouseEvent *event)
{
qDebug() << "pos" << event->pos();
foreach(QGraphicsItem *item, scene()->items())
{
item->setPos(event->pos());
qDebug() << "_ball pos" << item->pos();
}
}