Одна причина состоит в том, что это позволяет Вам расширять язык с помощью конструкций, специфичных для Вашего домена, делая его, эффективно, предметно-ориентированного языка. Эта техника невероятно мощна, поскольку она позволяет Вам рассуждать о проблема , Вы решаете, а не о перестановке битов.
Вы можете попробовать поместить кнопку для скрытия внутри другого виджета и попытаться заставить другой виджет сохранять свой размер должным образом, когда кнопка скрыта. Это может быть немного сложно. Был предложен QStackedWidget, и он может быть подходящим вариантом ... он был бы похож на оболочку QWidget, за исключением того, что изменение размера могло бы быть проще.
Другой вариант, на который вы можете обратить внимание, - это вставить разделитель для заполнителя и установить проставку до фиксированного размера, равного размеру кнопки. (Вам нужно будет обновить размер при изменении размера кнопки). Вы должны иметь возможность показывать / скрывать их попарно и заставлять их работать так, как вы ожидаете.
Я бы также попытался установить фильтр событий, который переопределяет исходное событие рисования, рисует прозрачный фон и игнорирует большинство событий, на которые виджет не должен реагировать, когда он невидим (возможно, все из их, кроме QResizeEvent
). Когда виджет снова станет видимым, удалите фильтр событий.
См. QObject :: installEventFilter (QObject *)
и QObject :: removeEventFilter (QObject *)
.
Я не знаю, лучший ли это способ, но решил это с помощью QStackedWidget для обертывания кнопки.
Try putting the button you want to hide and unhide in another layout. In that layout along with the button put a spacer. Call Button hide and spacer will take over.Spacer takes over hidden button's space. Other buttons continue to occupy same space.
A simple way to do it is to set the miminum size of the place holder widget instead of resizing it. While the size of the widget is not respected by layouts, the minimum size is.