Виджет QT исчезает, когда нет детей - PullRequest
0 голосов
/ 21 февраля 2019

Используя Qt5, я пытаюсь разработать приложение с виджетами, расположенными в столбцах.Виджеты создаются с помощью следующего кода:

QWidget *area = new QWidget(centralWidget);
QHBoxLayout *layout = new QHBoxLayout(area);
for (int i=0; i<n; i++) {
  columns.push_back(new QWidget(area));
  layout->addWidget(columns[i]);
  layouts2.push_back(QVBoxLayout());
  labels.push_back(new QVector<QLabel *>);
  for (j=0; j<m; j++) {
    labels[i].push_back(new QLabel(columns[i]));
    layouts2[i]->addWidget(labels[i][j]);
  }
}

Позже, метки могут быть добавлены или удалены из столбцов.Код для удаления метки:

QLabel *label = labels[i][j];
layouts2[i]->removeWidget(label);
delete label;
labels[i].pop_back();

В конечном итоге в столбце удаляются все метки.Я надеялся, что виджет столбца, даже без дочерних элементов, будет служить заполнителем и оставит дисплей, как и раньше, с пустым местом, где должен быть пустой столбец.Вместо этого столбец удаляется с дисплея и отображаются только столбцы n-1.Что не так, и как я могу это исправить?

1 Ответ

0 голосов
/ 21 февраля 2019

Не совсем понятно, чего вы пытаетесь достичь, но я подозреваю, что проблема заключается в реализации по умолчанию QWidget::sizeHint ...

QSize QWidget::sizeHint() const
{
    Q_D(const QWidget);
    if (d->layout)
        return d->layout->totalSizeHint();
    return QSize(-1, -1);
}

Если виджет имеет макет, то sizeHintвозвращает размер, требуемый макетом, который, если макет пуст, вероятно, будет QSize(0, 0).

Если вы хотите, чтобы рассматриваемый виджет каким-то образом был виден даже после удаления всех элементов из его макета, тогдапопробуйте позвонить QWidget::setMinimumSize с подходящим значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...