Qt窗口调整大小问题

Kri*_*ato 7 c++ qt resize window

调整大小后,我在重新绘制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();
Run Code Online (Sandbox Code Playgroud)

注意:我是Qt的新手; 也许我在布局上做错了什么?

编辑:我可能没有提供足够的信息.好吧,老实说,我仍然需要深入研究布局和相关材料.我在这里尝试做的是使用Qt Designer来设计窗口.我做了可能相当于一个愚蠢的错误:我没有使用整个窗口的整体父布局,但用几个较小的布局来攻击它,因此我必须移动并单独调整大小.请参阅Qt Designer屏幕(红色矩形是唯一的布局):calibrationWindow.

发生的事情是,在右边的框架中,我正在播放可以具有各种分辨率的视频剪辑.我希望框架根据此分辨率调整大小,这也意味着按钮和窗口必须相应地移动/调整大小.这就是窗口调整大小的地方.我确信有一个比我在这里做的更优雅的解决方案,但我试图在这里处理其他几个场景,因此缺乏代码质量.

结果是,当我加载剪辑时,窗口会尝试调整大小,但是这样做很糟糕; 以下是结果:calibrationWindowB

如果拖动窗口,它会"弹出"到正确的大小; 然而,与此同时,它看起来很丑陋.

还有一些问题:您是否使用Qt Designer来设计UI?我发现以编程方式可以更好地控制接口.在设计器中我无法做的一件事是主窗口小部件具有布局,即相当于具有以下代码:

QVBoxLayout* layout = new QVBoxLayout;
this->setLayout(layout);
Run Code Online (Sandbox Code Playgroud)

放置在设计器中的布局似乎总是创建这个"layoutWidget"子窗口小部件,然后您放置的布局就是其中的一部分.有什么方法吗?

Har*_*ich 6

我们使用设计师和代码的混合来创建布局,Qt布局系统有时可能非常不直观.但我可能不会在一个设计器ui文件中布置一系列完整的选项卡,我会让每个选项卡各自拥有一个窗口小部件,然后通过代码或设计器通过升级到自定义类来组装它们.通过将所有选项卡的所有功能放在一个文件中,几乎可以保证一个庞大的笨重的类,这可以更好地分离职责.

当窗口小部件在设计器中具有子窗口小部件时,您可以通过从上下文菜单添加布局来为其指定布局.确保未选择任何内容,然后单击要在其中创建布局的窗口小部件的背景,选择布局以及将为子项分配布局的所有窗口小部件.

有助于创建布局的层次结构.看看你的第一个截图,我可能会使用一个垂直布局,顶部和底部有一个垫片用于右边的项目,一个水平布局,左边和右边有一个用于按钮栏和一个所有项目的网格布局.没有垫片,当窗口增长时,您的物品将会延伸.间隔符可让您更好地控制调整大小的行为.