删除QGridLayout中的所有间距

时间:2010-02-04 22:20:01

标签: qt macos

我正在尝试构建programmaticaly(使用Qt 4.6)一个包含一系列QPushButton的窗口,这些窗口都打包在一起。它应该是这样的(我称之为工具箱):

toolbox image http://img99.imageshack.us/img99/9853/examplezk.png

所以,我创建了一个从QWidget派生的Toolbox类,它具有以下构造函数:

Toolbox::Toolbox (void)
  : QWidget (0, Qt::Tool)
{
  setWindowTitle (tr ("Toolbox"));

  QGridLayout *group = new QGridLayout (this);
  group->setSpacing (0);
  group->setContentsMargins (0, 0, 0, 0);
  group->setSizeConstraint (QLayout::SetFixedSize);
  setLayout (group);

  unsigned k = 0;
  QPushButton *buttons = new QPushButton[6];
  for (unsigned i = 0; i < 3; i++)
    for (unsigned j = 0; j < 2; j++)
    {
      buttons[k].setIcon (QIcon ("test.png"));
      buttons[k].setIconSize (QSize (32, 32));
      buttons[k].setContentsMargins (0, 0, 0, 0);
      buttons[k].setCheckable (true);
      buttons[k].setAutoExclusive (true);

      group->addWidget (&buttons[k], i, j);
      k++;
    }
  buttons[1].setChecked (true);

不知何故,它不起作用,我的按钮不会最终打包在一起:

result http://img9.imageshack.us/img9/774/resultr.png

我无法移除此垂直间距(以及整个阵列周围的边距)。欢迎任何帮助。

3 个答案:

答案 0 :(得分:1)

显然,这被认为是正常的事情:请参阅已关闭的相应bug report。报告的解决方法对我来说似乎没有用。

答案 1 :(得分:0)

由于您已将布局上的大小约束设置为QLayout::SetFixedSize,因此Qt将使用窗口小部件的大小提示作为其固定大小。您可能必须覆盖QWidget::sizeHint()类中的Toolbox,以使窗口小部件完全适合所有按钮所需的大小(在六个按钮的情况下,宽度将为64和高度将是96)。

答案 2 :(得分:0)

如果您正在使用现在在Qt4.6中标准的plastique样式,则QPushButtons的边框将在窗口小部件中绘制。尝试使用其他风格之一。 e.g:

#include <QGtkStyle>

QApplication a(argc, argv, true);
a.setStyle("gtk");

也可以使用QWidget :: setStyle()函数在单个小部件上设置样式。