2015-08-12 11 views
4

Я использую QSplitter для размещения некоторых виджетов рядом.Как изменить виджеты сплиттер программным способом в Qt?

Будучи пользователем, я могу изменить размер этих виджетов, просто перетаскивая разделитель.

Будучи программистом, я не знаю, как точно указать, какую ширину и какую высоту я хочу на данный момент.

Это мое первоначальное состояние (с поправкой на разные участки).

Я попытался использовать setFixedSize(), но после этого вызова пользователь больше не может изменять размеры виджетов (и это определенно правильное поведение, потому что размер становится «фиксированным»). enter image description here

Если я использую resize(), эффект почти не действует. Виджет изменяется, но (!) Некорректно и (!), Когда я снова начинаю перетаскивать виджет, получает его начальное состояние. enter image description here

Есть ли способ изменить размер этого левого виджета в коде правильно? Я не хочу иметь фиксированный размер, но изменение размера() не работает должным образом, как вы можете видеть. И что же мне делать?

ответ

7

QSplitter имеет свой способ QSplitter::setSizes(QList<int>), где каждая запись в списке представляет собой размер виджета в пикселях, слева направо или сверху вниз соответственно. Метод не требует, чтобы вы знали точную ширину, он по-прежнему работает с угаданными размерами.

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

+0

Большое вам спасибо. Это то, что мне нужно. Я потратил около 2 дней на поиски своего пути, но вы мне очень помогли. Благодарю. –