Ale*_*lke 5 c++ layout geometry qt resize
我对Qt有各种各样的尺寸问题.我正在创建自己的小部件并使用不同的布局(通常,我需要自己的小部件才能使它们正常工作,而无需花费数小时的时间来处理"强大的"默认布局......这些布局并没有按照预期布局.)
一旦我完成了一个小部件及其布局,它就无法正常工作.大小永远不会被正确设置,除非我调用widget->resize(1, 1);哪个最终强制"调整大小"并使小部件看起来正确(即重新计算几何体.)即使updateGeometry()调用也没有效果.
当resize()需要在父窗口小部件上调用(yuck!)和我正在阅读的内容时,这是一个可怕的问题,布局是否正确编程.
是否有一个样本可以工作,并且不是几千行,或者Qt需要几千行才能使任何东西完美运行,即使是最简单的小部件?
为使窗口小部件及其布局立即工作而调用的最小函数是什么?
谢谢.亚历克西斯
PS我试图执行的sizeHint(),minimumSize(),maximumSize()我失踪,其他人呢?我希望这就足够了.显然,我还在setGeometry()布局上实现了适当调整孩子的大小.
---加1
有一个样本图像的布局明显不像Qt中那样可用.不同键的定位,功能和颜色是XML驱动的,适用于世界上任何键盘.

(注意,此示例未显示在两行上显示的Enter键,而在下方比在顶部更宽;或多或少,根本不适用于常规布局;当然,它适用于我的版本.)
---澄清
我不太清楚如何更好地描述问题.我想在旁边写一个测试小部件,看看我如何重现问题,然后发布并最终修复它.8-)
内部Qt布局使用的默认布局功能需要大量编码.我想避免复制/粘贴所有这些,因为为了维护,它几乎不可能.
---今天的调查结果
由于我需要调整其中一个小部件,我决定添加一个VBoxLayout并使其工作.
我实际上发现了问题...我的树中的一个小部件是a QScrollArea并sizeHint()返回(-1,-1).不完全是我所期望的但是......无论你放在那个小部件里面,你都知道如何计算它的宽度和高度,否则它就会失败.
仔细查看代码,我实际上可以通过使用找到的最宽宽度来计算宽度.一旦我使用它,小部件就会出现(当列表中的内容发生变化时,它实际上会自行调整大小,有点酷.)
话虽这么说,我早些时候的评论是关于拥有一个自动调整大小的小部件树.从树的根到树叶的父母,所有这些小部件都需要有效的布局.一旦我在顶部窗口小部件中添加了一个,它就会自行调整自身及其子项的大小(好吧......在我的情况下QScrollArea,其余部分需要从下到上调整大小.有趣的是如何工作!)
---啊!哈!时刻(或者:您发现阅读实施代码的内容!)
今天我遇到了另一个问题,只需要正确的电话......我在文档中找不到任何有价值的东西.
所有对象现在都有布局,但某个父级不能正确调整大小.简单明了.
我打电话给父母如下:
// changes to the children are changing the geometry
parentWidget()->updateGeometry();
Run Code Online (Sandbox Code Playgroud)
是啊.文档说这就是你必须要做的.通话时没有任何事情发生.不知道它应该做什么,我没有看那个功能.无论如何,它从来没有为我做过任何事.
所以...我看了一下布局,试图了解它如何向上/向下发送信息.除了一个有趣的评论之外,我没有看到太多东西:
// will trigger resize
Run Code Online (Sandbox Code Playgroud)
这是SetFixedSize模式的说法.要实现该功能,您需要进行更新布局.啊! 是的...布局,而不是父窗口小部件......让我们试试:
parentWidget()->layout()->update();
Run Code Online (Sandbox Code Playgroud)
瞧!它在我拥有的所有情况下都能正确调整大小.相当令人难以置信的是,小部件updateGeometry()不会触发相同的效果......
这不会帮助您解决眼前的问题,但我想向您展示我使用标准布局和按钮制作的键盘。它并不完美,它仍然无法帮助您使用跨越两行的回车键,但它还不错。它也可以通过调整窗口大小来调整大小,尽管我不确定从下面的图像中是否可以看出这一点,因为SO可能会缩放它们。(您可以通过在自己的选项卡中打开它们来查看实际图像)


无论如何,这是仅使用 Qt Designer 完成的,无需手动编码。它由一个顶级垂直布局和 5 个水平布局组成。然后将按钮插入 5 个水平布局之一。可以通过将大多数按钮的水平和垂直大小策略设置为“忽略”,然后将您想要更宽的按钮设置为水平“最小”来控制按键的大小。可以通过设置按钮的最小和最大尺寸限制来调整事情。调整大小时,按钮将不会保持其相对比例,这可能需要一些自定义编程。
使用 css 样式表和背景图像可以很好地近似示例中的样式。这仍然不是一个小努力,但您应该能够在没有自定义布局和按钮的情况下完成大部分工作。
| 归档时间: |
|
| 查看次数: |
2640 次 |
| 最近记录: |