Qt QGridlayout 布局比例问题

图片描述
如图,右方是一个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不就是一行一列排列的吗,而我设置了比例为什么却没有生效?

阅读 13.4k
1 个回答

方案:
在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);

最终效果图
图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏