我有以下代码,我在QGridLayout
中放置了一个按钮和一个文本框。注意我使用第3列和第4列来放置它们。
QGridLayout *insAddPanel = new QGridLayout();
{
QLineEdit* ledInstrumentName = new QLineEdit();
insAddPanel->addWidget(ledInstrumentName, 0, 3);
QPushButton* btnAddInstrument = new QPushButton();
btnAddInstrument->setText("Add");
insAddPanel->addWidget(btnAddInstrument, 0, 4);
}
mainLayout->addLayout(insAddPanel);
......
然而,当我运行这个时,我会得到这样的结果:
我希望文本编辑和按钮只占用可用水平空间的2/5。这就是我将它们放在第3和第4列的原因。由于这不起作用,我该如何完成?在Qt中有类似空的空间小部件吗?我搜索但没找到它。
答案 0 :(得分:8)
使用void QGridLayout::setColumnStretch ( int column, int stretch )。
您可以为所有列设置stretch = 1
。它会给你想要的视图。
答案 1 :(得分:1)
使用QHBoxLayout,添加一些垫片,并设置正确的拉伸系数。 QSpacerItem - 是关于你原来的问题。
有没有理由使用网格布局?
答案 2 :(得分:0)
您可以使用QGridLayout::setColumnMinumumWidth(int column, int minSize)
将列column
的宽度设置为minSize
像素。这也适用于空列。在你的情况下,你会做这样的事情:
insAddPanel->setColumnMinimumWidth(0, 100); //Makes the empty column 0 100 pixels wide
insAddPanel->setColumnMinimumWidth(1, 100); //Makes the empty column 1 100 pixels wide
insAddPanel->setColumnMinimumWidth(2, 100); //Makes the empty column 2 100 pixels wide
将100
更改为您希望列宽的像素数。
此外,如果您使用此解决方案,则不需要三列,一列非常大就足够了。
还有一个setRowMinimumHeight
方法对行执行相同的操作。