Как я могу сделать макет соответствующим его содержанию?

Итак, у меня есть QVBoxLayout с двумя дочерними макетами. Внутри первого есть ярлыки, а второй состоит из glwidget. Цель состоит в том, чтобы сделать первый макет точного размера, необходимого для отображения меток, не больше и не меньше (виджеты выравниваются по верхнему краю). (Так что на самом деле он занимает небольшую часть экрана). И мне нужно, чтобы он не зависел от размера окна. Я пробовал кое-что, и в настоящее время я просто использую addStrech, чтобы сделать его хотя бы сносным. Так что мне было интересно. Могу ли я достичь того, чего хочу, с помощью управления макетами?

  QVBoxLayout *v_layout = new QVBoxLayout (this);

  QHBoxLayout *labels_layout = new QHBoxLayout (this);
  QVBoxLayout *labels_layout1 = new QVBoxLayout (this);
  QVBoxLayout *labels_layout2 = new QVBoxLayout (this);

  QVBoxLayout *drawer_layout = new QVBoxLayout (this);

  number_of_points_label = new QLabel (this);
  set_n_label ();

  function_name_label = new QLabel (this);
  set_func_label ();

  state_label = new QLabel (this);
  set_state_label ();

  fabs_max_label = new QLabel (this);
  change_fabs_max_label ();

  drawer_layout->addWidget (drawer);

  labels_layout->setAlignment (Qt::AlignTop);
  labels_layout1->addWidget (number_of_points_label);
  labels_layout1->addWidget (function_name_label);
  labels_layout1->addWidget (fabs_max_label);
  labels_layout2->addWidget (state_label);

  labels_layout->addLayout (labels_layout1);
  labels_layout->addLayout (labels_layout2);

  v_layout->addLayout (labels_layout);
  v_layout->addLayout (drawer_layout);


  v_layout->setStretchFactor (labels_layout, 1);
  v_layout->setStretchFactor (drawer_layout, 8);

person vowchick    schedule 04.09.2020    source источник
comment
Вам, вероятно, придется показать диаграмму и ваш минимальный код, чтобы получить помощь.   -  person drescherjm    schedule 04.09.2020
comment
Просто предположение, но вместо того, чтобы добавлять растяжку, попробуйте установить коэффициент растяжки. когда вы добавляете glwidget.   -  person G.M.    schedule 04.09.2020
comment
Добавил нужный код. Я имел в виду setStrechFactor, конечно   -  person vowchick    schedule 04.09.2020
comment
Что-то вроде этого? SO: как правильно повернуть камеру в трехмерном мире? ;-)   -  person Scheff's Cat    schedule 05.09.2020
comment
Пожалуйста, попробуйте v_layout->setStretchFactor(labels_layout, 0); и v_layout->setStretchFactor(drawer_layout, 1); (или просто используйте для этого второй параметр addLayout()). Это говорит макету предоставить все оставшееся пространство для drawer_layout, в то время как label_layout должен потреблять ровно столько, сколько необходимо.   -  person Scheff's Cat    schedule 05.09.2020