Qt компоновка элементов на форме

Не разобраться мне в компоновке элементов в QtCreator. Не пойму, использую компоновки, вроде бы и хорошо, а вроде бы и нет. Есть у меня на форме VerticalLayout, в него добавлены элементы. Чтобы в VerticalLayout разместить элементы в одну строку, добавил в него HorizontalLayout и в сам HorizontalLayout добавил необходимые элементы, вот что у меня получилось: HorizontalLayout

Кнопка "Обновить", мне нужна справа, для этого добавил HorizontalSpacer. Но вот сама кнопка обрезана под длину строки, не удобно... Хотелось бы сделать её немного пошире, сам HorizontalLayout этого не позволяет сделать. Как мне сделать кнопку шире?

И второе: В этом же VerticalLayout, есть QTableWidget. В QTableWidget данные загружаются продолжительное время. Хочу на время загрузки QTableWidget скрыть и на месте QTableWidget показать QProgressBar. Когда скрываю QTableWidget (setVisible(false)), этот VerticalLayout все что в нем есть, равномерно распределяет по вертикали, этого мне не нужно. Мне надо, что бы QTableWidget исчез, а все остальное оставалось на своих местах!


Ответы (2 шт):

Автор решения: Maxim Timakov
  1. Размер кнопки, варианты решения
    • Самое простое решение: добавить пробелов вокруг строки " Обновить "
    • Можно установить свойство minimumSize у кнопки
    • Настроить для каждого элемента в layout-е stretch factor(в дизайнере настраивается в свойстве layoutStretch)

введите сюда описание изображения

  1. Центрирование progressBar:
    • Поместить progressBar на отдельный widget
    • туда же поместить tableWidget
    • у widget выставить свойство sizePolicy/Вертикальная == Expanding
    • назначить вертикальный компоновщик

введите сюда описание изображения

→ Ссылка
Автор решения: magrif

Вытащить кнопку из компоновки, в её свойствах найти minimumSize и поставить ширину кнопки, меньше которой она становиться не будет. Обратное можно провернуть и с maximumSize.

Создать QStackedWidget с двумя страницами, где на первой создать прогресс-бар, а на второй Ваш QTableWidget. Ну и при заполнении прогресс-бара (сигнал valueChanged(int) и член-функция maximum()) переключать на вторую страницу (setCurrentIndex(int) у QTableWidget).

Визуальный пример

→ Ссылка