petar
11th November 2009, 08:41
hi, i'm new to QT (ofcourse): i have a problem and don't know if it is the right aproach.
In short: I just want the circle to rotate and stay fixed - instead of dancing
I have a Qmainwindow, in the middle there is a graphicview, on the scene there is a circle divided in 4 pieces (2 lines) and a button "rotate". So i need the circle to rotate when you push the button.
Because i don't know yet how to deal with time (e.g. rotating the circle for N seconds) i rotate it for 30 degrees. The problem is that i need the circle to be fixed and the starting point to be in the middle of the circle, so that when i push the button it rotates around his own axis. I hope you understand what i mean.
Now it's rotating around the default starging point (0,0) i upper left corner of my BoundingRect so the circle isn't fixed but rather it rotates all over the view around the default (0,0) instead of staying fixed and rotating on place.
Here is a picture what i mean:
http://lookpic.com/i/458/sLrZpv4v.jpeg (http://lookpic.com/i/458/sLrZpv4v.jpeg)
I think i need to transform the default starting point (0,0) of my QRectF to the middle of my circle -> so that what it will stay fixed and rotate around his own axis. I'm not sure if i've got it right.
Code:
//constructor of main class (RuletV1.cpp)
RuletV1::RuletV1(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
QGraphicsScene *scena = new QGraphicsScene();
ui.graphicsView->setScene(scena);
m_elipsa = new CircleItem(); //note: QGraphicsItem *m_elipsa;
scena->addItem(m_elipsa);
}
//push method
void RuletV1::on_pushButton_clicked()
{
dynamic_cast<CircleItem*>(m_elipsa)->rotate(30); // is there better way rotating?
}
//circeitem.cpp
#include "circleitem.h"
//constructor
CircleItem::CircleItem(QGraphicsItem *parent)
: QGraphicsItem(parent)
{}
//destructor
CircleItem::~CircleItem()
{}
//return QRectF
QRectF CircleItem::boundingRect() const
{
return QRectF(0,0,100,100);
}
//Paint
void CircleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget)
{
painter->setRenderHint(QPainter::Antialiasing);
painter->drawLine(0,50, 100, 50); //line one
painter->drawLine(50, 0, 50, 100); //line two
painter->drawEllipse(0, 0, 100, 100); //circle
}
p.s: i'v excluded some .h files as they are not so crucial right now
//main.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
RuletV1 w;
w.show();
return a.exec();
}
I hope this is enough info - thx in advanced
In short: I just want the circle to rotate and stay fixed - instead of dancing
I have a Qmainwindow, in the middle there is a graphicview, on the scene there is a circle divided in 4 pieces (2 lines) and a button "rotate". So i need the circle to rotate when you push the button.
Because i don't know yet how to deal with time (e.g. rotating the circle for N seconds) i rotate it for 30 degrees. The problem is that i need the circle to be fixed and the starting point to be in the middle of the circle, so that when i push the button it rotates around his own axis. I hope you understand what i mean.
Now it's rotating around the default starging point (0,0) i upper left corner of my BoundingRect so the circle isn't fixed but rather it rotates all over the view around the default (0,0) instead of staying fixed and rotating on place.
Here is a picture what i mean:
http://lookpic.com/i/458/sLrZpv4v.jpeg (http://lookpic.com/i/458/sLrZpv4v.jpeg)
I think i need to transform the default starting point (0,0) of my QRectF to the middle of my circle -> so that what it will stay fixed and rotate around his own axis. I'm not sure if i've got it right.
Code:
//constructor of main class (RuletV1.cpp)
RuletV1::RuletV1(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
QGraphicsScene *scena = new QGraphicsScene();
ui.graphicsView->setScene(scena);
m_elipsa = new CircleItem(); //note: QGraphicsItem *m_elipsa;
scena->addItem(m_elipsa);
}
//push method
void RuletV1::on_pushButton_clicked()
{
dynamic_cast<CircleItem*>(m_elipsa)->rotate(30); // is there better way rotating?
}
//circeitem.cpp
#include "circleitem.h"
//constructor
CircleItem::CircleItem(QGraphicsItem *parent)
: QGraphicsItem(parent)
{}
//destructor
CircleItem::~CircleItem()
{}
//return QRectF
QRectF CircleItem::boundingRect() const
{
return QRectF(0,0,100,100);
}
//Paint
void CircleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget)
{
painter->setRenderHint(QPainter::Antialiasing);
painter->drawLine(0,50, 100, 50); //line one
painter->drawLine(50, 0, 50, 100); //line two
painter->drawEllipse(0, 0, 100, 100); //circle
}
p.s: i'v excluded some .h files as they are not so crucial right now
//main.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
RuletV1 w;
w.show();
return a.exec();
}
I hope this is enough info - thx in advanced