我如何创建多个自定义小部件并以其绝对位置显示它们

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

所以我目前有一个自定义小部件,我想在单击按钮后将它们添加到主窗口。我想先将它们全部添加到一个固定位置,然后将其拖到我喜欢的任何位置。我可以在QHBoxLayout或QVBoxLayout的帮助下创建和显示这些自定义窗口小部件,但是在这种情况下,创建它们后它们将不在同一位置。任何帮助将不胜感激!

qt
1个回答
0
投票

顾名思义,QLayout类管理添加到其中的项目的位置和几何。您不能将某个项目从布局中移出(例如拖动),而必须先将其从布局中移除(QLayout::removeItem()和派生类)。例如,当您将工具栏或停靠小部件拖出QMainWindow时,它会经过各种修改,将其从MW布局中删除,更改小部件的窗口标志,记住布局中的旧位置,依此类推。然后反过来再次停靠它。

要执行您描述的操作(在窗口中任意拖动窗口小部件),您无需使用QLayout并通过指定QWidget::setGeometry()来手动放置窗口小部件。在初始位置之后,并假设用户有某种方式可以抓取小部件(标题栏或您制作的拖动手柄等),您可能仍需要管理其位置,例如,是否调整了主窗口的大小(如果您关心关于保持它们的约束)。本质上,您将有一堆充当单独窗口的独立小部件,并且可能需要某种方式来跟踪它们。

我不知道您在说什么类型的小部件,但是QMdiArea可能是一个选项,它允许用户在其中拖动窗口小部件,将它们制成表格,保存/恢复状态,等等。

为了获得更大的灵活性,您还可以查看QMdiArea。图形场景具有许多功能,可用于用户移动的项目/小部件,对其进行跟踪等。总体上来说,这可能是最灵活的方法,您还可以在图形场景中使用常规的Qt Graphics Framework

关于任意定位小部件的其他一些问答(我相信还有更多的发现):

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