Удалить все интервалы в QGridLayout - PullRequest
7 голосов
/ 05 февраля 2010

Я пытаюсь программно (с Qt 4.6) построить окно, содержащее серию QPushButton, упакованных вместе. Это должно выглядеть так (который я называю набором инструментов):

изображение панели инструментов http://img99.imageshack.us/img99/9853/examplezk.png

Итак, я создал класс Toolbox, производный от 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);

Каким-то образом это не работает, и мои кнопки не упакованы вместе:

результат http://img9.imageshack.us/img9/774/resultr.png

Мне не удается удалить этот вертикальный интервал (и поля, окружающие весь массив). Любая помощь приветствуется.

Ответы [ 3 ]

1 голос
/ 06 февраля 2010

Очевидно, это считается нормальным явлением: см. Соответствующий отчет об ошибке , который был закрыт. Обходной путь, о котором сообщают, кажется, не работает для меня.

0 голосов
/ 05 февраля 2010

Если вы используете стиль пластика, который теперь является стандартным в Qt4.6, границы QPushButtons отрисовываются внутри виджета. Попробуйте использовать один из других стилей. e.g.:

#include <QGtkStyle>

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

Стиль также можно установить для отдельного виджета с помощью функции QWidget :: setStyle ().

0 голосов
/ 05 февраля 2010

Поскольку вы установили ограничение размера макета на QLayout::SetFixedSize, Qt будет использовать подсказку о размере виджета в качестве фиксированного размера. Возможно, вам придется переопределить QWidget::sizeHint() в классе Toolbox, чтобы сделать виджет ровно таким, каким он должен быть, чтобы соответствовать всем кнопкам (в случае ваших шести кнопок ширина будет равна 64, а высота будет равна 96).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...