Как программно изменить размер виджетов сплиттера в Qt?

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

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

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

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

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

Если я использую resize (), это почти не влияет. Размер виджета изменен, но (!) Неправильно и (!), Когда я снова начинаю перетаскивать, виджет получает свое первоначальное состояние.
введите описание изображения здесь

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

4

Решение

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

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

7

Другие решения


По вопросам рекламы [email protected]