没有孩子时,QT小部件消失

时间:2019-02-21 15:22:36

标签: qt layout

使用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 :(得分:1)

尚不清楚您要实现什么目标,但我怀疑问题在于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