21altf
31st October 2011, 02:12
I'm tryin to make a QGraphicsLineItem rotate, but everytime i trigger rotate it moves to another location. I mean, it does rotate, but not in a especific point! I think it its rotation in its QGraphicsView central point. I dunno how to fix it.
Here is the code:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <Qt>
#include <QGS.h>
#include <QGraphicsScene>
#include <QGraphicsLineItem>
#include <QEvent>
#include <QDropEvent>
#include <QSignalMapper>
#include <QMouseEvent>
#include <QtDebug>
#include <QWidget>
#include <QList>
#include <math.h>
#include <QtCore/qmath.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
MainWindow::setCentralWidget(ui->view);
scene = new QGS(this);
scene->setSceneRect(MainWindow::geometry());
ui->view->setSceneRect(MainWindow::geometry());
QObject::connect(ui->action_Line,SIGNAL(triggered()),this,SLOT(criarLin ha()));
QObject::connect(ui->action_New,SIGNAL(triggered()),this,SLOT(newFile() ));
QObject::connect(ui->actionR_otate,SIGNAL(triggered()),this,SLOT(rotate ()));
ui->view->setScene(scene);
ui->view->setMouseTracking(true);
setWindowTitle(tr("AutoPac v1.0"));
}
//Private Functions
MainWindow::~MainWindow()
{
delete ui;
}
//Private Slots
void MainWindow::criarLinha()
{
scene->setMode(scene->InsertLine);
}
void MainWindow::newFile()
{
scene = new QGS(this);
scene->setSceneRect(QRectF(0, 0, 512, 600));
ui->view->setScene(scene);
}
void MainWindow::rotate()
{
int i = 0;
// qreal x1,y1,x2,y2;
// x1 = 0;
// y1 = 0;
// x2 = 0;
// y2 = 0;
// double pi = 3.1415;
for (i = 0 ; i < scene->selectedItems().length() ; i++)
{
if(scene->selectedItems().at(i)->type() == QGraphicsLineItem::Type)
{
scene->selectedItems().at(i)->rotate(90); //90 is just an example
scene->selectedItems().at(i)->setSelected(true);
}
}
}
Here is the code:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <Qt>
#include <QGS.h>
#include <QGraphicsScene>
#include <QGraphicsLineItem>
#include <QEvent>
#include <QDropEvent>
#include <QSignalMapper>
#include <QMouseEvent>
#include <QtDebug>
#include <QWidget>
#include <QList>
#include <math.h>
#include <QtCore/qmath.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
MainWindow::setCentralWidget(ui->view);
scene = new QGS(this);
scene->setSceneRect(MainWindow::geometry());
ui->view->setSceneRect(MainWindow::geometry());
QObject::connect(ui->action_Line,SIGNAL(triggered()),this,SLOT(criarLin ha()));
QObject::connect(ui->action_New,SIGNAL(triggered()),this,SLOT(newFile() ));
QObject::connect(ui->actionR_otate,SIGNAL(triggered()),this,SLOT(rotate ()));
ui->view->setScene(scene);
ui->view->setMouseTracking(true);
setWindowTitle(tr("AutoPac v1.0"));
}
//Private Functions
MainWindow::~MainWindow()
{
delete ui;
}
//Private Slots
void MainWindow::criarLinha()
{
scene->setMode(scene->InsertLine);
}
void MainWindow::newFile()
{
scene = new QGS(this);
scene->setSceneRect(QRectF(0, 0, 512, 600));
ui->view->setScene(scene);
}
void MainWindow::rotate()
{
int i = 0;
// qreal x1,y1,x2,y2;
// x1 = 0;
// y1 = 0;
// x2 = 0;
// y2 = 0;
// double pi = 3.1415;
for (i = 0 ; i < scene->selectedItems().length() ; i++)
{
if(scene->selectedItems().at(i)->type() == QGraphicsLineItem::Type)
{
scene->selectedItems().at(i)->rotate(90); //90 is just an example
scene->selectedItems().at(i)->setSelected(true);
}
}
}