【问题标题】:Overlapping widgets in QtDesignerQtDesigner 中的重叠小部件
【发布时间】:2014-03-12 21:42:28
【问题描述】:

我想在 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);

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

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

【问题讨论】:

    标签: qt qt-designer


    【解决方案1】:

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

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

    1. 为简单起见创建新的表单,简单的小部件
    2. 向其添加文本编辑(从 Widget Box 拖放),从 Object Inspector 中您应该会看到它成为根小部件的子级
    3. 为其添加标签(从 Widget Box 拖放),然后从 Object Inspector 中您应该会看到它成为根小部件的子级
    4. 右键单击根小部件(在 Object Inspector 中最简单),然后从上下文菜单底部选择 Lay out > - Lay out in Grid
    5. 右击标签,从布局对齐>将它设置为你想要的角对齐

    完成。这是我的 Designer 中的样子:

    现在根据你的真实形式调整上面的内容。


    好吧,用 Designer 实现上述目标似乎很困难,而且做事恰到好处可能有点运气问题... 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); 
    

    【讨论】:

    • 标签小部件仍然在文本编辑旁边,而不是在其角落上方。如果我成功了,我希望它会成为对象资源管理器中 textedit 的子项
    • @user2366975 您的屏幕截图看起来手柄标签与文本编辑器位于不同的QGridLayout 单元格中。
    • @user2366975 是的,在玩了一会儿之后,使用 Designer 很难获得您在此答案的屏幕截图中看到的内容。所以最好加一点代码。
    • @user2366975 为了正确选择下方小部件的行和列,我不得不使用indexOf(Widget*)getItemPosition(...)
    • 问题是当你在Designer模式下添加item时,它们会被添加到Grid的不同列中。但是,当您使用源代码添加它们时,您会将这两个项目添加到同一列中。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-10-08
      • 2013-03-12
      • 2019-03-28
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-22
      相关资源
      最近更新 更多