如何正确使用Qt布局

如何正确使用Qt布局,qt,layout,qlayout,Qt,Layout,Qlayout,我正在尝试使用GUI布局,看看我能用它做些什么。下面是我想要实现的:小部件的上半部分有一个标题框,它应该是这样的: ***************************** * [LOGO] [button]* ***************************** 徽标应位于框架的中心,左侧没有任何内容。在徽标的右侧也会有一个按钮。标志有一个固定的大小 我可以不使用按钮将徽标设置在中间,但只要添加它,徽标的位置就会改变 我现在的解决方案是在LOGO左边添加一个没有

我正在尝试使用GUI布局,看看我能用它做些什么。下面是我想要实现的:小部件的上半部分有一个标题框,它应该是这样的:

*****************************
*        [LOGO]     [button]*
*****************************
徽标应位于框架的中心,左侧没有任何内容。在徽标的右侧也会有一个按钮。标志有一个固定的大小

我可以不使用按钮将徽标设置在中间,但只要添加它,徽标的位置就会改变

我现在的解决方案是在LOGO左边添加一个没有文本的测试标签,这样框架就在中间标记为对称。p>


但是我仍然很好奇这个布局的正确方法,有人能帮忙吗?非常感谢

您可以考虑使用Ad和Advices来分配适当的列的优先级。您还可以使用一个控件在小部件之间添加空间

下面是一些示例代码:

QGridLayout *gridLayout = new QGridLayout;
// Set the minimum widths for all three columns of the grid
gridLayout->setColumnMinimumWidth(0, 100);
gridLayout->setColumnMinimumWidth(1, 300);
gridLayout->setColumnMinimumWidth(2, 100);

// use width 100 to fill the first column
QSpacerItem *spacer = new QSpacerItem(100, 0);
QLabel *logo = new QLabel;
QButton *button = new QButton;

gridLayout->addWidget(spacer, 0, 0);
gridLayout->addWidget(logo, 0, 1);
gridLayout->addWidget(button, 0, 2);

另外,有关更多信息,请参见此问题的答案:

谢谢您的回复!两种方法我都试过了,但都不如我想象的那么有效。我可以有一个3个水平网格的网格布局,但是如果我不在最左边的网格中放置任何东西,qt设计器中的小部件看起来是正确的,但是当我运行应用程序时,徽标位于不同的位置。由于右侧的按钮,在徽标的左侧和右侧使用垫片会导致徽标稍微偏左。您需要确保第1列和第3列的宽度相同。那么你的第二列将居中。我有办法设置列的宽度吗?在我看来,列的宽度是根据该列中的小部件大小自动设置的。我试图在设计器中调整它,但失败了。我在回答中添加了一些示例代码,以演示如何调整QSpacerItem的大小并将项目添加到布局中。谢谢!这很有帮助。