2012-04-14 2 views
1

У меня есть QGridLayout, который имеет несколько виджетов в шести строках. Строки 1, 3 и 5 содержат QLabel, a QLineEdit и QPushButton, которые открывают диалог выбора файла. Строки 2, 4 и 6 содержат QLabel, который используется для представления ошибок проверки пользователю. Ошибки скрыты на изображении ниже.Как я могу предотвратить появление виджетов в QGridLayout?

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

QGridLayout with vertically restricted elements

Так что мой вопрос, как я могу гарантировать, что все QWidgets в QGridLayout может занять столько же пространство по мере необходимости?

EDIT: По предложению @Avaris', я пытался дозвониться setMinimumSize() для каждого виджета в QGridLayout (все 6 строк), и видимые элементы выглядят намного лучше (спасибо, @Avaris!). Но теперь, когда я вызываю ошибку проверки, сама ошибка (красный QLabel) прокладывается поверх других виджетов. Могу ли я заставить QGridLayout не перекрываться?

Вот что он выглядит сейчас: enter image description here

+1

Вы установили минимальный размер этих виджетов на что-то маленькое? – Avaris

+0

@Avaris, я попробовал ваше предложение, и оно хорошо работает для видимых элементов. Тем не менее другие строки (содержащие скрытый «QLabel») теперь отображаются поверх других элементов. Могу ли я заставить их всех быть в очереди? Благодаря! – James

+0

Я не предлагал вам установить минимальный размер :). Я спрашивал, если вы * что-то задали. Если вы не задали размер ваших виджетов, они не должны быть такими маленькими. Можете ли вы опубликовать код? – Avaris

ответ

0

При поиске вокруг решения, я нашел, что something in the TrollTech archives поддерживается @ идея Авариса в об установке минимального размера виджета. Сообщение предлагает установить минимальный размер для каждого виджета в QGridLayout.

Моя реализация выглядит так, как я Переберите все элементы, которые будут добавлены к моему QGridLayout:

widget = QtGui.QWidget() 
hint = widget.sizeHint() 
if hint.isValid(): 
    widget.setMinimumSize(hint) 

Достоверность намеком меняется на макете используется, но виджет sizehints всегда, кажется, справедливо, когда я используйте QGridLayout.

+0

Uh-oh. Ссылка умерла, вы помните, о чем это было? – vines

+0

Ах, извините, я не помню деталей! Поскольку большинство образцов кода архива TrollTech были на C++, я подозреваю, что он очень похож на приведенный выше пример кода python. – James

Смежные вопросы