4

好的,所以基本上我有一个带有 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);

它确实是我想要的,但图形场景不再调整大小(仍然是一个小的恒定大小)。我想在将小部件与中心对齐的同时保留调整大小。谢谢。

4

2 回答 2

4

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

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

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

当然,您可以为“外部”布局和“内部”布局创建一个 QWidget,但大多数时候只嵌套 2 个布局应该没问题。

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

于 2012-05-30T15:08:59.213 回答
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();
}
于 2012-05-29T06:09:28.710 回答