0

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

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 );

这工作正常,但如果我将窗口调整得非常小或大,那就不太对了。我认为问题在于图形场景矩形和图形视图矩形不一样或什么。此外,我有一个调整窗口大小的背景:

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

4

1 回答 1

1

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

于 2012-06-07T18:35:17.530 回答