Проблема с разметкой Qt - PullRequest
0 голосов
/ 15 ноября 2010

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

[[recentFolder]    // bar 
[(stretch)
[folderA],         // foo
[folderB],         // programs
[folderC],         // c:
(stretch)]
[rootDir]]         // my computer

Я надеюсь, что вы можете увидеть три виджета в моем макете: кнопка папки для самой последней папки вверху, кнопка папки для корневой папки внизу и виджет, которыйотображает много кнопок папок в середине.Все кнопки папок имеют фиксированную ширину и высоту.Я добавил растягиваемые области в верхней / нижней части центрального виджета, потому что это единственный виджет, который должен иметь возможность изменять размеры (расширение политики по высоте).Но когда я изменяю размер родительского виджета, он выглядит следующим образом:

[[recentFolder]    // bar
// empty space does not
// belong to any child
[(stretch)
[folderA],         // foo
[folderB],         // programs
[folderC],         // c:
(stretch)]
// empty space does not
// belong to any child
[rootDir]]         // my computer 

, что означает, что центральный виджет вообще не получает никакого события изменения размера.Мне нужно, чтобы он менялся следующим образом:

[[recentFolder]    // bar
[
// child was resized
(stretch)
[folderA],         // foo
[folderB],         // programs
[folderC],         // c:
(stretch)
// child was resized
]
[rootDir]]         // my computer 

Как вы можете (должны) видеть, мои области растяжения не имеют никакого эффекта и не работают так, как я думаю.Я прихожу из .NET и скучаю по тому, как я мог прикрепить элементы управления в родительском, чтобы они использовали все существующее пространство.Любая идея, как сделать это в Qt 4?

Сейчас я звоню setGeometry() на моего центрального ребенка в рамках события resize родителей, которое работает, но обходит менеджер макета.

1 Ответ

1 голос
/ 17 ноября 2010

после нескольких дней серьезных wtf!? Я выяснил причину, по которой мои виджеты не изменились должным образом. Я до сих пор не знаю , почему это происходит, поэтому, если кто-то проявит любезность и объяснит мне, его ответ будет помечен как правильный вместо моего.

Факты:

  • политики размера были правильными
  • факторы растяжения были правильными

Я добавил три виджета в свой основной виджет так:

QVBoxLayout* layout = new QVBoxLayout();
this->setLayout(layout);
layout->addWidget(recent, 0, Qt::AlignTop | Qt::AlignCenter);
layout->addWidget(list, 1, Qt::AlignTop | Qt::AlignCenter);
layout->addWidget(root, 0, Qt::AlignTop | Qt::AlignCenter);

Как только я удалил элементы выравнивания, все работает как положено:

QVBoxLayout* layout = new QVBoxLayout();
this->setLayout(layout);
layout->addWidget(recent);
layout->addWidget(list);
layout->addWidget(root);
...