У меня есть окно Qt, и в нижней части окна находится ряд виджетов (в основном, кнопок и флажков), с которыми пользователь может взаимодействовать.
Я хочу, чтобы этот ряд виджетов выгляделдовольно (где «довольно» для меня определяется как «равномерно распределенный»), то есть независимо от того, какую ширину пользователь выбирает для своего окна, виджеты в этом ряду должны всегда иметь одинаковое пространство между ними и междукрайний левый и правый виджеты и края окна).
т.е. строка должна выглядеть примерно так (где XXX обозначает виджет):
[ XXX XXX XXX XXX XXX XXX ]
Это кажется достаточно простым для выполнения- т.е. я могу просто сделать что-то вроде этого:
QBoxLayout * hbl = new QBoxLayout(Qt::LeftToRight, parentWidget);
hbl->addStretch();
hbl->addWidget(new QPushButton);
hbl->addStretch();
hbl->addWidget(new QPushButton);
hbl->addStretch();
hbl->addWidget(new QPushButton);
[...]
hbl->addStretch();
Это работает, пока все виджеты видны.
Проблема в том, что иногда я хочу скрыть некоторые извиджеты в строке, так как они не имеют отношения к поставленной задаче.
В этом случае оставшиеся видимые виджеты заканчиваются неравномерно, потому что нет способа скрыть «растянутые» элементы, связанные с теперь скрытыми кнопками.
Например,если бы я скрыл первый и второй виджеты в строке, показанной выше, то оставшиеся виджеты в конечном итоге выглядят так:
[ XXX XXX XXX XXX ]
^^^^^^ ^^
too much space on the left!
Есть ли простой способ получить желаемое поведение или янужно погрузиться в явную обработку неявных QSpacerItems?