QMainWindow::showMaximized() 不更新大小

Posted

技术标签:

【中文标题】QMainWindow::showMaximized() 不更新大小【英文标题】:QMainWindow::showMaximized() Doesn't Update Size 【发布时间】:2013-05-14 20:44:25 【问题描述】:

我正在尝试创建一个QMainWindow 来封装我要放入其中的QGraphicsView。我希望它开始最大化,所以我这样做:

QMainWindow *mainWindow = new QMainWindow();
mainWindow->setWindowState(Qt::WindowMaximized);
mainWindow->show();
qDebug() << mainWindow->size();

这说我的最大化窗口是 200x100,这显然是不正确的。

我是否缺少某种更新功能?我不明白为什么它不会更新大小。我也尝试过使用showMaximized(),结果相同。

编辑

我的最终目标是使用 QMainWindow 作为包含 QGraphicsScene 的 QGraphicsView 的容器。最重要的是,我希望有一个 50% 宽度和 100% 高度的 QWebView,以一切为中心。

所以,我需要宽度和高度才能使所有坐标和大小都正确。

【问题讨论】:

我猜这是你的一部分 main 或类似的,即在事件循环开始之前。您需要等待处理事件以调整窗口大小 - 我认为 show 只是发布一个事件。 是的,它就在main 的顶部。在我看到更新后的尺寸之前,有没有推荐的方法让一切都解决? 我猜这取决于您需要该尺寸的用途。为什么需要尺寸? 我有一个带有 QGraphicsScene 的 QGraphicsView,我想在其中最大化,然后附加一个 50% 宽度和 100% 高度的 QWebView,以所有内容为中心。 那么你应该更新你的问题来解释这就是你所追求的。听起来不是微不足道的 - 让视图与它的父级一起调整大小应该是(并且不应该需要比标准布局更多的东西),但是我不太确定 50% 的宽度。可能需要处理resizeEvent,或垫片之类的东西。 【参考方案1】:

嗯,setWindowState() 的效果不是立竿见影的,它是异步执行的。当窗口状态改变时,widget 会收到一个 changeEvent(),所以你应该重新实现 this 或 resizeEvent() 来获取最大化发生后的 width() 和 height()。

【讨论】:

我试过了,但它仍然不会显示最大化的几何图形...

以上是关于QMainWindow::showMaximized() 不更新大小的主要内容,如果未能解决你的问题,请参考以下文章