QGridLayout中的Qt对齐消除了其元素的大小调整

时间:2012-05-29 05:27:04

标签: qt alignment qgridlayout

好的,基本上我有一个带有QWidget的简单表和两个按钮,如下所示:

QGridLayout *layout = new QGridLayout;
layout->addWidget(viewcontainer,0,0,1,2);
layout->addWidget(reset,1,0);
layout->addWidget(done,1,1);

这基本上就是我想要的,其中“重置”和“完成”是按钮。本质上它是一个QWidget,viewcontainer,当按钮的高度保持不变时,用户更改窗口大小时会调整大小。但是,gridlayout的默认设置是将内容对齐到左侧。如果我改为:

layout->addWidget(viewcontainer,0,0,1,2, Qt::AlignCenter);

它确实是我想要的,但是graphicsscene不再调整大小(仍然是一个小的常量)。我想保留调整大小,同时将小部件与中心对齐。感谢。

2 个答案:

答案 0 :(得分:4)

我认为提供干净解决方案的最简单的解决方案是嵌套2个布局。

您的“外部”(父级)布局应该是QHBoxLayout,您可以将QGridLayout作为带有addLayout()的“内部”(子)布局添加到其中。

根据我的经验,你应该避免每次都设置Qt :: Alignment。它真的搞乱了你的布局。对于简单的布局,它可以工作,但对于更复杂的布局,你应该避免它。并且您永远不会知道您将来应该扩展您的布局,所以我的建议是使用嵌套布局。

当然,您可以为'外部'布局和'innser'布局创建一个QWidget,但是大多数情况下,只需嵌套2个布局就可以了。

您也可以使用QSpacerItem来微调您的布局。

答案 1 :(得分:2)

看看这个示例代码,我认为它符合您的要求:

#include <QApplication>
#include <QPushButton>
#include <QGraphicsView>
#include <QGridLayout>
#include <QPalette>

class MyWidget : public QWidget
{
public:
   MyWidget()
   {
       QGridLayout * layout = new QGridLayout(this);

       QGraphicsView * gv = new QGraphicsView;
       layout->addWidget(gv, 0,0, 1,2);
       layout->setRowStretch(0, 1);  // make the top row get more space than the second row

       layout->addWidget(new QPushButton("reset"), 1,0);
       layout->addWidget(new QPushButton("done"),  1,1);
   }
};

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

   MyWidget w;
   w.show();
   return app.exec();
}