如何使Qt网格布局自动调整列宽

时间:2015-01-06 22:35:34

标签: c++ qt grid-layout autosize

我有一个QDialog,其中包含网格布局。网格宽5列,行数可变。 QDialog以预建的UI开头,在5列中的每一列中都有一个标签。网格的其余部分构建如下。对于添加的每一行:

  • 将QLineEdit添加到col 0
  • 将QComboBox添加到第1-3列,每个都有一个变量和不同数量的项
  • 将QCheckBox添加到第4列

完成后,第0列是最宽的列。列1-4的宽度相同。一些组合框项目(第1-3栏)太宽,无法看到并显示为" ..."。复选框列(4)比它需要的宽。我已经尝试在每个该死的小部件上使用QWidget::adjustSize(),包括对话框本身,我无法将其设置为适合所有内容的自动调整大小。在尝试调试时,我打印了每个列的小部件宽度,但我看到的值与我在屏幕上看不到的一样。我的印象是,网格布局会自动调整每列中的每个小部件,使其足够宽,以适应最宽的项目,但它似乎并没有这样做。是否有某种setAutoColumnWidth属性或什么?

1 个答案:

答案 0 :(得分:1)

如果要为布局列设置宽度,可以为布局中的窗口小部件设置拉伸值。例如,将所有小部件的水平延伸设置为1以获得相等的宽度:

lineEdit->sizePolicy().setHorizontalStretch(1);
comboBox1->sizePolicy().setHorizontalStretch(1);
comboBox2->sizePolicy().setHorizontalStretch(1); 
comboBox3->sizePolicy().setHorizontalStretch(1); 
checkBox->sizePolicy().setHorizontalStretch(1);

如果您希望特定列更宽,请为该列中的窗口小部件设置更高的拉伸值。