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() 不更新大小的主要内容,如果未能解决你的问题,请参考以下文章