【问题标题】:QT Widget Disappears when there are No Children没有子项时 QT 小部件消失
【发布时间】:2019-07-15 13:42:42
【问题描述】:

使用 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 列。出了什么问题,我该如何解决?

【问题讨论】:

    标签: qt layout


    【解决方案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。

    【讨论】:

    • 谢谢。 setMinimumSize() 是我需要的。
    猜你喜欢
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多