我有一个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
演示应用程序=)