调整大小后,我在重新绘制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'子窗口小部件,您放置的布局是然后的父级。任何方式?
答案 0 :(得分:6)
我们使用设计师和代码的混合来创建布局,Qt布局系统有时可能非常不直观。但我可能不在一个设计器ui文件中布局一系列完整的选项卡,我会使每个选项卡各自拥有一个窗口小部件,然后通过代码或设计器通过升级到自定义类来组装它们。通过将所有选项卡的所有功能放在一个文件中,几乎可以保证一个庞大的笨重的类,这可以更好地分离职责。
当窗口小部件在设计器中具有子窗口小部件时,您可以通过从上下文菜单添加布局来为其指定布局。确保未选择任何内容,然后单击要在其中创建布局的窗口小部件的背景,选择布局以及将为子项分配布局的所有窗口小部件。
有助于创建布局的层次结构。看看你的第一个截图,我可能会使用一个垂直布局,在顶部和底部有一个垫片用于右边的项目,一个水平布局,左边和右边是用于按钮栏和所有项目的网格布局。没有垫片,当窗口增长时,您的物品将会延伸。间隔符可让您更好地控制调整大小的行为。
答案 1 :(得分:0)
setMinimumSize()
。没关系,但你也应该拨打resize()