重新定位窗口上的图形项目

时间:2012-06-07 17:35:32

标签: c++ qt qgraphicsview qgraphicsitem qgraphicsscene

好的,我基本上在图形场景中随机放置了图形项目。我打开一个窗口并显示这些项目。当我调整窗口大小时,我希望这些项目保持相同的大小,但与窗口大小成比例地重新定位。我是如何做到这一点的是我将图形视图子类化,然后当有一个resize事件时,它将resize对象发送到我的graphicsscene对象。然后我就能做到这样的事情:

double scaleX = double(event->size().width())/double(event->oldSize().width());
double scaleY = double(event->size().height())/double(event->oldSize().height());

然后我用这些值来做到这一点:

derivedPointItem->setPos( derivedPointItem->pos().x() * scaleX,
                          derivedPointItem->pos().y() * scaleY );

这样可行,但如果我将窗口调整得非常小或者大,那就不太对了。我认为问题是graphicsscene rect和图形视图rect不一样。此外,我有一个调整窗口大小的背景:

void roiwindow::drawBackground( QPainter* painter, const QRectF& rect )
{
    this->setSceneRect(0,0,rect.width(),rect.height());
    painter->save();
    painter->drawImage(rect, *refimage);
    painter->restore();
}

这是我正在编写的程序中需要的东西。此外,它允许我看看调整大小是否有效。我基本上可以将背景设置为多边形,然后将点放在多边形的边缘上。当我将图像的大小调整为非常大或小时,这些点不再位于多边形的顶点上,而是稍微接近它们。任何人都知道更好的方法来做到这一点或一种方法来解决它?感谢。

编辑:这是我正在进行的项目:

dropbox.com/s/myxi8kvdl7x9ye2/ncorr.tar.gz

1 个答案:

答案 0 :(得分:1)

这种方法确实有效(虽然我不确定它是否是最好的方法......)。无论如何,由于setPos()函数,它最终成为编码错误。我的程序中的setPos()函数通过指定图像左上角的坐标而不是中心来工作。这最终导致一些错误。