QtDesigner中重叠的小部件

时间:2014-02-13 19:40:02

标签: qt qt-designer

我想在QtDesigner中叠加两个小部件: 有一个很大的QTextBrowser,右下角的下面应该是一个非交互标签,我将用它作为一个拖动手柄来调整窗口大小(主要的小部件是无框架的所以我需要实现它)。 通常这个标签将位于QTextBrowser下方,它在grip-label的左侧留下了大量未使用的空间。所以我想把把手标签放在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);

括号之间的部分是父窗口小部件。

这就是现在的样子,但这不是我想要的:

enter image description here

2 个答案:

答案 0 :(得分:8)

使用QGridLayout通常最简单。它允许小部件占用相同的网格单元格。对于这个特殊问题,1x1网格就足够了。

与设计师一起尝试的步骤:

  1. 创建新表单,简单的Widget以简化
  2. 为其添加文本编辑(从窗口小部件框中拖放),从Object Inspector中,您应该看到它成为根窗口小部件的子项
  3. 为其添加标签(从Widget Box拖放),从Object Inspector中,您会看到它成为根小部件的子项
  4. 右键单击根小部件(在Object Inspector中最简单),然后从上下文菜单的底部选择 Lay out&gt; - Lay in Grid < / LI>
  5. 右键单击标签,然后从布局对齐&gt; 将其对齐到您想要的角落
  6. 完成。这是我的设计师的样子:

    enter image description here

    现在适应你的真实形式。


    好吧,看起来上面用Designer很难实现,也许有些事情是运气好的事情......设计师似乎并不支持做你想做的事情,似乎。

    为清楚起见,这是一个完整的源代码:

    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); 
    

答案 1 :(得分:0)

我遇到了同样的问题,但是我没有设法在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())