小部件带有两个(或更多)布局

4
我需要一种设置小部件内不同布局的方式...
就像我们将小部件按标签分为两部分,并且这个小部件内部有其他带有布局的小部件,就像附图所示 alt text 我们只有4个小部件:主要小部件、标签一小部件、标签二小部件、按钮小部件,对于按钮使用一个垂直和两个水平拉伸。
有人能指点我正确的方法吗?谢谢。
1个回答

8
创建QVBoxLayout,然后将两个QHBoxLayout添加到其中。在顶部的QHBoxLayout中添加标签,在底部的QHBoxLayout中添加stretch、按钮、stretch。
参考图片如下:window example
#include <QString>
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QLocale>

int main(int argc, char** argv){
    QApplication app(argc, argv);

    QWidget widget;

    QVBoxLayout* vLayout = new QVBoxLayout(&widget);
    QHBoxLayout* topLayout = new QHBoxLayout();
    QHBoxLayout* bottomLayout = new QHBoxLayout();
    QLabel* label1 = new QLabel(QObject::tr("Label1"));
    QLabel* label2 = new QLabel(QObject::tr("Label2"));
    label1->setAlignment(Qt::AlignCenter);
    label2->setAlignment(Qt::AlignCenter);
    QPushButton* btn1 = new QPushButton(QObject::tr("The Button!!!!"));
    topLayout->addWidget(label1);
    topLayout->addWidget(label2);
    bottomLayout->addStretch();
    bottomLayout->addWidget(btn1);
    bottomLayout->addStretch();
    vLayout->addLayout(topLayout);
    vLayout->addLayout(bottomLayout);

    widget.show();

    return app.exec();
}

也许对你来说制作一个草稿应用程序并不难?谢谢回复。我可以做一个带标签的布局,和一个带有按钮和两个拉伸元素的子布局...但是如何将这两个不同的布局合并到一个主部件中呢? - vinnitu
好的...我们彼此之间似乎存在一些误解...让我们假设按钮需要位于小部件的中心(水平和垂直)...那么我们需要进行哪些更改呢?标签一必须位于小部件的中心,占据一半的空间,而标签二必须位于第二半部分的中心... - vinnitu
@vinnitu:你想把按钮放在标签的上方,这样它就会遮挡部分底层控件?在这种情况下,你的描述与你的图片不符。 - SigTerm
是的,在这种情况下,它将隐藏两个标签的一部分,那么你认为如何使用qt实现呢?当然可以使用坐标(x,y)moveto等设置位置,但问题是是否可以使用布局系统来完成。 - vinnitu
@vinnitu:我认为你不能使用默认布局来完成它,因为小部件不应该在布局中重叠,而且我在Qt 4中没有看到类似于“zorder”的东西。但是,你可以制作自定义小部件(包含或模拟两个标签),或者尝试制作自定义布局类。制作小部件将是最简单的-只需在paintEvent期间绘制任何你想要的文本(即两个标签)。然后使用标准布局向此小部件添加按钮。 - SigTerm

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