Я пытаюсь создать программно (с Qt 4.6) окно, содержащее серию QPushButton
все упакованные вместе. Это должно быть похожим так (который я называю панелью инструментов):
изображение панели инструментов 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);
Так или иначе это не работает, и мои кнопки не заканчиваются упакованные вместе:
результат http://img9.imageshack.us/img9/774/resultr.png
Мне не может удаться удалить это пространство по вертикали (и поля, окружающие целый массив). Любая справка приветствуется.
По-видимому, это считается нормальным явлением: см. Соответствующий отчет об ошибке , который был закрыт. Обходной путь, о котором сообщается, похоже, не работает для меня.
Если вы используете стиль пластики, который теперь является стандартным в Qt4.6, границы QPushButtons отрисовываются внутри виджета. Попробуйте использовать один из других стилей. например :
#include <QGtkStyle>
QApplication a(argc, argv, true);
a.setStyle("gtk");
Стиль также может быть установлен для отдельного виджета с помощью функции QWidget :: setStyle ().
Поскольку вы установили ограничение размера для макета на QLayout :: SetFixedSize
, Qt будет использовать подсказку размера виджета в качестве его фиксированного размера. Возможно, вам придется переопределить QWidget :: sizeHint ()
в классе Toolbox
, чтобы сделать виджет настолько большим, насколько он должен быть для всех кнопок (в случае вашего шесть кнопок, ширина будет 64, а высота 96).