代码之家  ›  专栏  ›  技术社区  ›  F'x

删除qgridlayout中的所有间距

  •  7
  • F'x  · 技术社区  · 14 年前

    我正在尝试以编程方式(使用qt 4.6)构建一个包含一系列 QPushButton 是的,都打包在一起了。它应该是这样的(我称之为工具箱):

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

    因此,我创建了一个工具箱类,从QWidget派生,它具有以下构造函数:

    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 回复  |  直到 8 年前
        1
  •  1
  •   David Grayson    8 年前

    显然,这被认为是正常的事情:见相应的 bug report ,已关闭。工作区报告说那里似乎不适合我。

        2
  •  0
  •   RA.    14 年前

    因为您已经将布局上的大小约束设置为 QLayout::SetFixedSize ,qt将使用小部件的大小提示作为其固定大小。您可能需要重写 QWidget::sizeHint() Toolbox 类,以使小部件完全达到适合所有按钮所需的大小(对于六个按钮,宽度为64,高度为96)。

        3
  •  0
  •   PiedPiper    14 年前

    如果您使用的塑性样式现在是qt4.6中的标准样式,那么qpushButtons的边框将绘制在小部件内。尝试使用其他样式之一。例如。:

    #include <QGtkStyle>
    
    QApplication a(argc, argv, true);
    a.setStyle("gtk");
    

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