将 QGraphicsView 锚定到屏幕的一角

Anchoring a QGraphicsView to the corner of the screen

本文关键字:一角 屏幕 QGraphicsView      更新时间:2023-10-16

我有一个渲染我的游戏的QGraphicsView。此视图始终填满整个屏幕。在右上角,我还有另一个QGraphicsView用作迷你地图;它位于游戏视图上方。我希望这个迷你地图锚定在屏幕的右上角,始终保持其大小。这段代码几乎可以工作,除了小地图的左侧永远不会改变(这是意料之中的)。

void MainWindow::resizeEvent(QResizeEvent *event)
{
    mainWindow->graphicsView->resize(event->size().width(), event->size().height());
    QRect newRect(mainWindow->miniMapGraphicsView->geometry());
    newRect.setRight(event->size().width() - 20);
    mainWindow->miniMapGraphicsView->setGeometry(newRect);
}

我该怎么做?

当您想以某种方式定位小部件时,布局通常是最好的方法。

QFormLayout添加到graphicsView,并将其layoutDirection设置为 Qt::RightToLeft 。然后将miniMapGraphicsView添加到布局中。编辑小地图的属性,将其水平和垂直sizePolicy设置为 Fixed,并将其minimumSizemaximumSize设置为您想要的尺寸。

另一种方法是使用QGridLayout并使用水平和垂直间隔将迷你地图推送到视图的任何角落。

注意:默认情况下,布局设置了边距,因此如果您希望小部件在边缘处紧密对齐,请将其归零。