Qt QGridlayout 布局比例问题

发布于 2022-09-05 23:02:50 字数 776 浏览 8 评论 0

图片描述
如图,右方是一个label和三个pushbutton,相关代码如下

    QLabel *label = new QLabel;
    label->setText("Welcome to HelloMaze");
    rightLayout = new QGridLayout();
    rightLayout->addWidget(label, 0, 0, 1, 2);
    rightLayout->addWidget(sizeCombo, 1, 0, 1, 1);
    rightLayout->addWidget(solveBtn, 1, 1, 1, 1);
    rightLayout->addWidget(saveBtn, 2, 0, 1, 2);

    rightLayout->setRowStretch(0, 1);
    rightLayout->setRowStretch(1, 4);
    rightLayout->setSpacing(5);
    rightLayout->setMargin(5);

我想把QLabel和QPushbutton的比例调整一下,搜了好一会搜到了setRowStretch,可是为什么没用啊?
Gridlayout不就是一行一列排列的吗,而我设置了比例为什么却没有生效?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

追星践月 2022-09-12 23:02:50

方案:
在QGridlayout 里放一个QSpacerItem对象item并用addItem()添加进layout里.
然后设置成合适比例,比如设置成item占总的1/2,这样layout的一半都被item占据
原理:
左方的大小是固定的,故右方的QGridlayout 也要是这个大小,而setRowStretch() 是对整个gridlayout内的控件进行比例划分,无论如何划分都会覆盖整个layout,所以要实现这样的布局,只有用一个什么东西把控件"撑上去"

最后放代码

rightLayout->addWidget(msgBrowser, 0, 0, 1, 2, Qt::AlignCenter);
    rightLayout->addWidget(sizeCombo, 1, 0, 1, 1);
    rightLayout->addWidget(solveBtn, 1, 1, 1, 1);
    rightLayout->addWidget(updateBtn, 2, 0, 1, 1);
    rightLayout->addWidget(saveBtn, 2, 1, 1, 1);
    rightLayout->addWidget(giteeBtn, 3, 0, 1, 2, Qt::AlignCenter);
    QSpacerItem *spacer = new QSpacerItem(50, 50, QSizePolicy::Maximum);
    rightLayout->addItem(spacer, 4, 0);

    rightLayout->setRowStretch(0, 3);
    rightLayout->setRowStretch(1, 1);
    rightLayout->setRowStretch(2, 1);
    rightLayout->setRowStretch(3, 10);

最终效果图
图片描述

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文