qt - 没有孩子时 QT 小部件消失
问题描述
使用 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 列。出了什么问题,我该如何解决?
解决方案
目前尚不完全清楚您要实现的目标,但我怀疑问题出在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
使用合适的值调用。
推荐阅读
- tensorflow - 在 Google Colab 中运行 TensorFlow 测试
- angular - 当路由具有子模块时,Angular 应用程序无法有条件地加载路由
- python-3.x - 如何从 np.array 中调用每个元素?
- python - Tensorflow梯度wrt输入
- android - Flutter:从 WebView 加载 IFrame
- python - 数据框中的新列,其值来自 GroupBy 的最大行
- macros - doxygen 无法正确解析宏
- winforms - 如何为 DataGridviewColumn 类型声明变量?
- python - 带有 seaborn 或 pyplot 的 Python 子图
- php - 如果这些是自定义字段中的字符串,如何对日期进行排序?