我试图制作一个 QGraphicsView
,其宽度与位于窗口中心的高度相同 .
我在Qt Designer中创建了一个普通的 QGraphicsView
并设置了最小尺寸,添加了一些计算,将 QGraphicsView
居中放入主窗口的中心,并设置与高度相同的宽度 . 它仅使用 setGeometry
. 比我创建一个只有一个非常长的矩形的 QGraphicsScene
. 我希望图形场景适合查看,所以我使用了 QGraphicsView::fitInView
. 一切正常,但问题来自调整窗口大小 .
当我增加窗口的高度和宽度时,一切都很好 . QGraphicsView
有一个新的位置和一个新的大小 . 当我只减少窗口大小的一部分时,一切仍然正常 . 但是(最后)当我将窗口的大小减小到可能的最小值时,一切都会中断 . 视图中的矩形具有正确的宽度(与没有调整大小相同,我用尺子测量它:)),但是创建了新的边距并且 QGraphicsView
没有定位并且尺寸合适(因此它不仅是边距,但也许 setGeometry
没有效果) .
我注意到,在使用 setGeometry
之前调用 QGraphicsView::fitInView
时会发生同样的事情 .
它让我发疯,请帮忙!
这是一些代码:
void MainWindow::resizeEvent(QResizeEvent *e)
{
int h = e->size().height(),
w = e->size().width(),
s;
if(w > h) s = h-120;
else s = w-120;
ui->board->setGeometry((w-s)/2,(h-s)/2,s,s);
int scaleWidth = ui->board->scene()->width(),
scaleHeight = ui->board->scene()->height();
ui->board->fitInView(QRectF(0, 0, scaleWidth, scaleHeight), Qt::KeepAspectRatio);
}
以下是 QGraphicsView
发生的图像,矩形为红色,视图为蓝色:
1 回答
我试图使用
QGraphicsView::fitInView
与Qt::KeepAspectRatio,
并遇到类似的问题 .我发现这个答案有用:
How to anchor QGraphicsView to a special point on a scene?
看来关键是手动设置场景的边界矩形 . 以下代码对我有用: