【发布时间】:2011-09-26 16:32:56
【问题描述】:
在调整大小后重绘 QWidget 窗口时遇到问题。我试过update()、repaint()、adjustSize(),但似乎都遇到了同样的问题:只有部分窗口被重绘,导致底部和右侧的窗框不显示。窗口也没有完全调整大小。
以防万一,窗口位于QMdiArea 中。
谢谢。
// ... some subwidget resizing and moving.
calibrationWindowUIs[activeWindow].layoutWidget2->move(QPoint(oldXLeft, 30 + height + 21));
calibrationWindowUIs[activeWindow].layoutWidget1->move(QPoint(oldXRight, 30 + height + 21));
// Set window size.
calibrationWindows[activeWindow]->setMinimumSize(calibrationWindowUIs[activeWindow].tabWidget->geometry().width() + 40, calibrationWindowUIs[activeWindow].tabWidget->geometry().height() + 40);
calibrationWindows[activeWindow]->update();
注意:我是 Qt 新手;也许我的布局有问题?
编辑:我可能没有提供足够的信息。好吧,老实说,我仍然需要更深入地研究布局和相关材料。我在这里尝试做的是使用 Qt Designer 来设计窗口。我犯了一个愚蠢的错误:我没有为整个窗口使用整体父布局,而是用几个较小的布局破解了它,因此我必须单独移动和调整大小。查看 Qt Designer 屏幕(红色矩形是唯一的布局):。
发生的情况是,在右侧的帧中,我正在播放一个可以具有各种分辨率的视频剪辑。我希望框架根据此分辨率调整大小,这也意味着按钮和窗口必须相应地移动/调整大小。这就是调整窗口大小的地方。我确信有一个比我在这里做的更优雅的解决方案,但我在这里尝试处理其他几种情况,因此缺乏代码质量。
结果是,当我加载剪辑时,窗口尝试调整大小,但效果不佳;结果如下:
如果窗口被拖动,它会“弹出”到正确的大小;然而,与此同时,它看起来很丑。
还有几个问题:您是否使用 Qt Designer 来设计您的 UI?我发现以编程方式可以更好地控制界面。我在设计器中无法做的一件事是拥有一个由主小部件作为父级的布局,即相当于拥有以下代码:
QVBoxLayout* layout = new QVBoxLayout;
this->setLayout(layout);
放置在设计器中的布局似乎总是创建这个“layoutWidget”子小部件,您放置的布局是然后的父级。有什么办法吗?
【问题讨论】:
-
你能想出一个不起作用的最小代码吗?
-
只是为了确定,您确定这不是布局问题?例如,一个小部件不会调整大小,而不是一个绘图问题?截图或许也有帮助。
-
看看你的一些代码会很方便。它对我有用。
-
抱歉,不在。这是代码的最后几行。
-
仍然很难说会发生什么。请检查您传递给 setMinimumSize 的宽度和高度是否正确,并尝试使用调整大小而不是更新。