Вы захотите добавить растягиваемую прокладку к макету:
button_layout = new QVBoxLayout ;
button_layout -> setSpacing(0);
button_layout -> setContentsMargins(0,0,0,0);
button_layout -> addStretch();
button_layout -> addWidget(button_1);
button_layout -> addWidget(button_2);
button_layout -> addWidget(button_3);
Это приведет к тому, что кнопки всегда будут в нижней части содержащего виджета.Обратите внимание, что горизонтальная часть будет по-прежнему растягиваться, если ваш виджет расширится таким образом;чтобы исправить это, вам нужно либо обернуть в другой (HBox) макет, либо переключиться на макет сетки.