У меня есть QDockWidget
s (не плавающий, только закрытый) внутри одного QWidget
. У меня есть некоторые виджеты внутри каждого QDockWidget
- их высоты должны быть равны. Эти внутренние виджеты могут быть скрыты через контекстное меню.Как сделать высоту подошвы Qt равной?
Мои внутренние виджеты должны иметь равную высоту. Я сделал это так:
void MyDocksPanel::redistributeSpace()
{
QBoxLayout * lay = (QBoxLayout *)layout();
for (int i = 0; i < lay->count(); i++)
{
QWidget * dock = lay->itemAt(i)->widget();
if (dock == NULL)
continue;
int size = 0;
foreach(QWidget * subWidget, dock->findChildren<QWidget*>())
size += subWidget->isVisible() ? 1 : 0;
if (dock->isVisible() && (size == 0))
dock->hide();
lay->setStretch(i, size);
}
}
Все работает отлично, пока я не добавить некоторые константные элементы для каждого QDockWidget
: некоторые горизонтальные полосы прокрутки и некоторые ярлыки ... Теперь мои внутренние виджеты имеют разные размеры. Но мне необходимо установить, что их высоты сильно равны.
QLayout
определяет размеры виджета на одном уровне иерархии виджета. Как я могу сделать подобранные по высоте подвиды?
3 Подвиджетов против 2 Подвиджетов
Моей первой стратегии установить растяжку 3 и 2:
Но, когда я добавил полосы прокрутки:
Высоты моих 5 виджетов равно 37,37,37,28,28 ... и вот неполадку
Должен ли я также добавить высоту заголовка QDockWidget и margin * 2 и расстояние между подэлементами и полосой прокрутки? – k06a
Мое предположение да, вы должны. :) Но попробуйте, не делая этого, и посмотрите, работает ли это. – Anthony
Два дня назад я пробовал этот путь. Нет успеха. Завтра я попробую. И у меня проблема с childWidgetMinimumHeight - я хотел бы изменить размер всего виджета вручную ... – k06a