gpt4 book ai didi

c++ - Qt fitInView 和调整大小

转载 作者:太空狗 更新时间:2023-10-29 23:52:00 27 4
gpt4 key购买 nike

我正在尝试制作一个宽度与高度相同的 QGraphicsView 位于窗口中心。

我在 Qt Designer 中创建了一个普通的 QGraphicsView 并设置了最小尺寸,添加了一些将 QGraphicsView 居中到主窗口中心的计算,并设置了与高度。它仅使用 setGeometry。然后我创建了一个只有一个非常长的矩形的QGraphicsScene。我希望图形场景适合查看,所以我使用了 QGraphicsView::fitInView。一切正常,但问题来自调整窗口大小。

当我增加窗口的高度和宽度时,一切都正常。 QGraphicsView 有了新的位置和新的大小。当我只缩小窗口的一部分尺寸时,一切仍然正常。但是(最后)当我将窗口的大小减小到可能的最小值时,一切都会中断。 View 中的矩形具有正确的宽度(与未调整大小相同,我用尺子对其进行了测量:)),但是创建了一个新的边距并且 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 发生的情况的图像,矩形是红色的, View 是蓝色的:

this is OK this is broken

最佳答案

我试图将 QGraphicsView::fitInViewQt::KeepAspectRatio, 一起使用,但遇到了类似的问题。
我发现这个答案很有帮助:

How to anchor QGraphicsView to a special point on a scene?

看来关键是手动设置场景的边界矩形。以下代码对我有用:

MainWindow::MainWindow(QWidget *parent) : 
QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);

// Set up graphics view
scene = new QGraphicsScene(this);
drawMyWidget();
scene->setSceneRect(-1.25, -1.25, 2.5, 2.5); // your scene's bounding rect here...
ui->graphicsView->setScene(scene);
ui->graphicsView->show();
}

void MainWindow::resizeEvent(QResizeEvent *) {
QRectF bounds = scene->itemsBoundingRect();
bounds.setWidth(bounds.width()*0.9); // to tighten-up margins
bounds.setHeight(bounds.height()*0.9); // same as above
ui->graphicsView->fitInView(bounds, Qt::KeepAspectRatio);
ui->graphicsView->centerOn(0, 0);
}

关于c++ - Qt fitInView 和调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17789878/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com