У меня есть приложение Qt для создания некоторых составных графических изображений. Например. пользователь выбирает некоторый компонент изображения на панели инструментов, помещает его в QGraphicsScene
, преобразует его и получает прибыль.
Вопрос: как выполнить масштаб и вращение операций с выбранными элементами.
На данный момент я унаследовал свой собственный класс Scene
и использую этот код для mouseMoveEvent
:
void Scene::mouseMoveEvent(QGraphicsSceneMouseEvent *evt)
{
QGraphicsScene::mouseMoveEvent(evt);
//bool isLMB = QApplication::mouseButtons() & Qt::LeftButton;
bool isShift = QApplication::keyboardModifiers() & Qt::ShiftModifier;
bool isCtrl = QApplication::keyboardModifiers() & Qt::ControlModifier;
if (this->newChip)
{
qreal ox = this->newChip->pos().x();
qreal oy = this->newChip->pos().y();
qreal nx = evt->scenePos().x();
qreal ny = evt->scenePos().y();
qreal dx = nx - ox;
qreal dy = ny - oy;
qreal w = this->newChip->transform().m11() * this->newChip->boundingRect().width();
qreal h = this->newChip->transform().m22() * this->newChip->boundingRect().height();
qreal l = sqrt(pow((float) dx, (float) 2.f) + pow((float) dy, (float) 2.f));
if (!isShift && !isCtrl)
{
this->newChip->setPos(evt->scenePos());
}
if (isShift)
{
//this->newChip->scale(fabs(w / dx), fabs(h / dy));
qDebug() << "scale: " << dx / w << dy / h;
}
if (isCtrl)
{
//this->newChip->rotate((qreal) (acos((float) (dx / l)) * 180.f / 3.14f));
qDebug() << "rotate: " << acos((float) (dx / l)) * 180.f / 3.14f;
}
}
}
Но мне нужны более приятные операции поворота и масштабирования, как и любое программное обеспечение для рисования при работе с выделением, например:
P.S .: да, я начал изменять демонстрационное приложение 40000 chips
=)