QtDesigner中的重叠小部件

12

我想在QtDesigner中叠加两个小部件: 有一个大的QTextBrowser,在右下角下面应该有一个非交互标签,我将用它作为拖动调整窗口大小的抓手(主要小部件是无边框的,所以需要实现它)。 通常,这个标签将坐落在QTextBrowser下面,这将使得抓手标签左侧有很多未使用的空间。因此,我想把抓手标签放在QTextBrowser上面。我希望在QtDesigner中实现这一点。但代码看起来会像这样:

QHBoxLayout *layout = new QHBoxLayout(videoWidget);
QLabel *overlayWidget = new QLabel();
overlay->setAlignment(Qt::AlignCenter);
overlay->setText("Overlaid Text");
layout->addWidget(overlay); 

或者像我之前在Python中做的一样:

self.textedit = QTextBrowser(self);
...
gripImage=QLabel(self.textedit);

方括号中的部分是父窗口小部件。

目前看起来就是这样,但这不是我想要的:

输入图像描述

2个回答

14
通常使用QGridLayout最简单实现。它允许小部件占用相同的网格单元。对于这个特定问题,1x1的网格就足够了。
尝试使用设计器的步骤:
  1. 创建新表单,选择纯Widget以保持简单
  2. 向其中添加文本编辑框(从Widget Box拖放),并从对象检查器中可以看到它成为根部件的子项
  3. 向其添加标签(从Widget Box拖放),从对象检查器中可以看到它成为根部件的子项
  4. 右键单击根部件(在对象检查器中最容易),从上下文菜单底部选择“排列” - “使用网格排列”
  5. 右键单击标签,从“布局对齐方式”中将其设置为所需角落对齐
完成。这是我的设计器中的效果图:

enter image description here

现在将其应用到你的实际表单。
好的,在设计器中实现以上内容似乎很困难,也许需要有些运气做到恰到好处... 看起来设计器似乎不支持你想要做的事情。
为了清晰起见,这是完整的源代码:
QGridLayout *layout = new QGridLayout(widget);
QTextBrowser *textBrowser = new QTextBrowser();
QLabel *label = new QLabel();
label->setText("Overlaid Text");

//label gets positioned above textBrowser and is an overlay
layout->addWidget(textBrowser, 0, 0, Qt::AlignLeft | Qt::AlignTop);
layout->addWidget(label, 0, 0, Qt::AlignRight | Qt::AlignBottom); 

标签小部件仍然在文本编辑器旁边,而不是位于其角落上方。如果我成功了,我期望它会成为对象资源管理器中文本编辑器的子项。 - user2366975
1
@user2366975,你的截图看起来好像句柄标签所在的QGridLayout单元格与文本编辑器不同。 - hyde
1
@user2366975 是的,在玩了一会儿之后,使用设计师工具很难实现这个答案中截图所示的效果。因此最好加入一些代码。 - hyde
1
为了正确选择位于下方的部件的行和列,我必须使用indexOf(Widget*)getItemPosition(...) - gibertoni
1
问题在于当您在设计器模式下添加项目时,它们会添加到网格的不同列中。但是,当您使用源代码添加它们时,您将两个项目都添加到同一列中。 - kato2
显示剩余6条评论

1
我曾经遇到同样的问题,但是在QtDesigner中我无法添加重叠的小部件。相反,在初始化我的MainWindow之后,我必须动态创建重叠的小部件。
我有两个小部件:
- dataset_tableWidget(tableWidget) - spinner_dataset_tableWidget( QtWaitingSpinner
我希望spinner_dataset_tableWidget可以在dataset_tableWidget上旋转。
在初始化MainWindow之后,您可以执行以下操作:
#Crating QtWaitingSpinners dinamically and positioning it over the tableWidgets
dataset_tableWidget = QtWaitingSpinner(dataset_tableWidget)
dataset_tableWidget.setSizePolicy(dataset_tableWidget.sizePolicy())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接