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:

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
){
ui.setupUi(this);
ui.graphicsView->setScene(scena);
m_elipsa = new CircleItem(); //note: QGraphicsItem *m_elipsa;
scena->addItem(m_elipsa);
}
//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);
}
To copy to clipboard, switch view to plain text mode
//push method
void RuletV1::on_pushButton_clicked()
{
dynamic_cast<CircleItem*>(m_elipsa)->rotate(30); // is there better way rotating?
}
//push method
void RuletV1::on_pushButton_clicked()
{
dynamic_cast<CircleItem*>(m_elipsa)->rotate(30); // is there better way rotating?
}
To copy to clipboard, switch view to plain text mode
//circeitem.cpp
#include "circleitem.h"
//constructor
{}
//destructor
CircleItem::~CircleItem()
{}
//return QRectF
QRectF CircleItem
::boundingRect() const {
}
//Paint
{
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
}
//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
}
To copy to clipboard, switch view to plain text mode
p.s: i'v excluded some .h files as they are not so crucial right now
//main.cpp
int main(int argc, char *argv[])
{
RuletV1 w;
w.show();
return a.exec();
}
//main.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
RuletV1 w;
w.show();
return a.exec();
}
To copy to clipboard, switch view to plain text mode
I hope this is enough info - thx in advanced
Bookmarks