【发布时间】:2017-03-28 05:04:38
【问题描述】:
我在 QGraphicsScene 中有一些 QGraphicsItems,它们在缩放时应该保持相同的大小和位置。我试过 QGraphicsItem::ItemIgnoresTransformations 但事实证明这些项目的位置错误。下面是一个示例代码:
我有这样的 QGraphicsView 子类:
class Graphics : public QGraphicsView
{
public:
Graphics();
QGraphicsScene *scene;
QGraphicsRectItem *rect;
QGraphicsRectItem *rect2;
protected:
void wheelEvent(QWheelEvent *event);
};
在它的构造函数中:
Graphics::Graphics()
{
scene = new QGraphicsScene;
rect = new QGraphicsRectItem(100,100,50,50);
rect2 = new QGraphicsRectItem(-100,-100,50,50);
scene->addLine(0,200,200,0);
rect->setFlag(QGraphicsItem::ItemIgnoresTransformations, true);
scene->addItem(rect);
scene->addItem(rect2);
setScene(scene);
scene->addRect(scene->itemsBoundingRect());
}
wheelEvent 虚函数:
void Graphics::wheelEvent(QWheelEvent *event)
{
if(event->delta() < 0)
scale(1.0/2.0, 1.0/2.0);
else
scale(2, 2);
scene->addRect(scene->itemsBoundingRect());
qDebug() << rect->transform();
qDebug() << rect->boundingRect();
qDebug() << rect2->transform();
qDebug() << rect2->boundingRect();
}
原始视图如下所示: 1
以直线为道路,以直线为符号。缩小时,矩形保持其大小但跳出场景: 2
应该是矩形的左上角到线的中间。我也对显示 boundingRect 和 transform 保持不变的调试信息感到困惑,这似乎没有任何改变!是什么导致了问题,有什么办法可以解决吗?有人可以帮忙吗?谢谢!
【问题讨论】:
标签: c++ qt qgraphicsitem