QLabel занимает все пространство

У меня есть QWidget, который содержит QVBoxLayout, и этот макет содержит QLabel и QToolButtons. Моя проблема в том, что QLabel занимает все пространство. Единственное решение, которое я нашел, — это установить MaximumHeight на QLabel, но если я это сделаю, Qt :: AlignTop больше не будет работать.

main.cpp:

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QWidget window_main;

QWidget *widget_steps = new QWidget(&window_main);
widget_steps->setFixedWidth(75);
widget_steps->move(QPoint(0, 0));
widget_steps->setStyleSheet("background-color: red;");

QVBoxLayout *layout_steps = new QVBoxLayout(widget_steps);
layout_steps->setContentsMargins(0, 0, 0, 0);
layout_steps->setSpacing(0);

QLabel *label_steps_start = new QLabel("steps:");
label_steps_start->setAlignment(Qt::AlignHCenter | Qt::AlignTop);
label_steps_start->setStyleSheet("background-color: blue;");
layout_steps->addWidget(label_steps_start);

QToolButton *tbutton_step1 = new QToolButton();
layout_steps->addWidget(tbutton_step1);

QToolButton *tbutton_step2 = new QToolButton();
layout_steps->addWidget(tbutton_step2);

QToolButton *tbutton_step3 = new QToolButton();
layout_steps->addWidget(tbutton_step3);window_main.showMaximized();

return a.exec();
}

Вот картинка, которая показывает, сколько места занимает QLable (синее пространство):
QLabel_space

Поэтому, пожалуйста, помогите минимизировать пространство, занимаемое QLable 🙂

0

Решение

Ваша проблема в том, что кнопки инструментов имеют фиксированный размер, и поэтому при изменении размера метка является единственным типом, который может расти: Следовательно:
После добавления метки добавьте растяжку к макету:

layout_steps->addWidget(label_steps_start);
layout_steps->addStretch();

Модифицированный код — добавляет растяжку внизу. Размер этикетки остается фиксированным, а кнопки остаются под ним. Я удалил все главное окно снаружи для тестирования.

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QWidget *widget_steps = new QWidget;
widget_steps->setFixedWidth(75);
widget_steps->move(QPoint(0, 0));
widget_steps->setStyleSheet("background-color: red;");

QVBoxLayout *layout_steps = new QVBoxLayout(widget_steps);
layout_steps->setContentsMargins(0, 0, 0, 0);
layout_steps->setSpacing(0);

QLabel *label_steps_start = new QLabel("steps:");
label_steps_start->setAlignment(Qt::AlignHCenter | Qt::AlignTop);
label_steps_start->setStyleSheet("background-color: blue;");
layout_steps->addWidget(label_steps_start);
//--- Removed.... layout_steps->addStretch();

QToolButton *tbutton_step1 = new QToolButton();
layout_steps->addWidget(tbutton_step1);

QToolButton *tbutton_step2 = new QToolButton();
layout_steps->addWidget(tbutton_step2);

QToolButton *tbutton_step3 = new QToolButton();
layout_steps->addWidget(tbutton_step3);
layout_steps->addStretch(); //<----- Added!
widget_steps->show();

return a.exec();
}
0

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

Один из способов сделать это — установить коэффициент растяжения для этого конкретного виджета внутри QVBoxLayout. Вы можете найти документацию для этого в Вот.

По сути, когда вы добавляете виджет, вы можете установить его, например:

#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>
#include <QtWidgets/QToolButton>
#include <QtWidgets/QVBoxLayout>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QWidget window_main;

QWidget *widget_steps = new QWidget(&window_main);
widget_steps->setFixedWidth(75);
widget_steps->move(QPoint(0, 0));
widget_steps->setStyleSheet("background-color: red;");

QVBoxLayout *layout_steps = new QVBoxLayout(widget_steps);
layout_steps->setContentsMargins(0, 0, 0, 0);
layout_steps->setSpacing(0);

QLabel *label_steps_start = new QLabel("steps:");
label_steps_start->setAlignment(Qt::AlignHCenter | Qt::AlignTop);
label_steps_start->setStyleSheet("background-color: blue;");
layout_steps->addWidget(label_steps_start, 3, Qt::AlignTop);
layout_steps->addStretch();

QToolButton *tbutton_step1 = new QToolButton();
layout_steps->addWidget(tbutton_step1, 1);

QToolButton *tbutton_step2 = new QToolButton();
layout_steps->addWidget(tbutton_step2, 1);

QToolButton *tbutton_step3 = new QToolButton();
layout_steps->addWidget(tbutton_step3, 1);window_main.showMaximized();

return a.exec();
}
1

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