Qt 如何使一个小部件同时浮动并相对于其父级

问题描述 投票:0回答:1

我正在使用 QT 5.15,正在创建一个单窗口应用程序,并想要添加一个小部件(其中将包含项目列表),具有以下要求:

  1. 它应该能够出现在其他小部件之上。它就像一个临时小部件,仅当用户选择特定操作时才可见。我只是无法将其放入现有布局中而不拧紧其他小部件的位置,因此它的最佳位置是位于其他小部件之上。它的尺寸是主窗口宽度的 1/3 和高度的 1/3。我也不想将其放置在主窗口之外,因为这将需要更多的屏幕空间

  2. 当用户移动窗口时,它应该与主窗口一起移动。就像主窗口中的所有内容都作为一个整体移动一样,我希望这个小部件与其一起移动。这是因为有合适的位置,我不想让用户体验变得复杂

为了避免模棱两可的行为,假设其中一个布局中有一个小元素,当我操作此布局或调整主窗口大小时,浮动小部件始终与这个小元素对齐。

我尝试过什么:

-QDialog:找不到将其与父级一起移动的方法。此外,它还会在任务栏中创建一个新条目,这有点烦人

-QDockWidget:在这种用法上比 QDialog 更好,但我仍然无法强制它相对于主窗口移动。

-QStackedWidget:据我了解,这不起作用,因为一次只能看到一个小部件。另外,我有一组 QStackedWidgets,添加另一个只会让事情变得更复杂

-任何其他小部件都想成为布局的一部分,但正如我所说,最佳位置是在另一个小部件的顶部。也许一个解决方案是一个尺寸为 10x10 的小部件,它实际上绘制了整个所需的内容。但我不知道 Qt 是否允许小部件在其报告区域之外绘制。

我也不希望有任何与重写 mainWindow 的 moveEvent 回调相关的黑客行为。首先,当我移动主窗口时,仅在移动结束时调用回调。其次,控制浮动小部件的小部件位于层次结构的深处。甚至有多个,放置在 QStackedWidget 中,并且只有一个是活动的。在切换 QStackedWidget 条目时,我需要使用信号处理技巧来处理它们。

有优雅简单的解决方案吗? QDockWidget 和布局中所有小部件的标准相对位置行为的组合。

实际上,具有确切行为的元素是 QMenu。它总是出现在其他小部件之上,独立于它们的布局。此外,它的位置始终相对于打开菜单的元素。然而,也有缺点 - 菜单仅用于显示文本条目和子菜单。此外,当我选择一个项目或尝试移动窗口时,它会关闭。同样,必须执行大量黑客攻击。

c++ qt
1个回答
0
投票

您可以只创建小部件而不将其设置在布局中。这样,您需要手动移动其位置并处理其大小,但它将位于同一父级的其他子窗口小部件之上(如果需要,使用

raise
方法),并且即使 main 也将保持其位置(相对于其父级)窗口已调整大小或移动。

© www.soinside.com 2019 - 2024. All rights reserved.