- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个小部件,其中包含一个国际象棋 table 和六个按钮,这些按钮显示在国际象棋 table 下方的 2 行中。按钮行比棋盘宽。国际象棋表和按钮位于 QGridLayout 中。 Chess table 有自己的 sizeHint,它是根据方格的大小计算出来的。
经过一些操作后,我删除了按钮并将包含所有内容的小部件调整为其 sizeHint (resize(sizeHint())
)。小部件在垂直方向上正确调整大小,但在水平方向上它保持与按钮行一样宽。问题是什么 ?
如果我仅使用国际象棋表构建小部件,则布局会正确调整小部件的大小。
我正在添加代码:
在窗口的构造函数中:
renderArea = new RenderArea(m_row,m_col,m_grid);
formLayout = new QGridLayout;
formLayout->addWidget(renderArea,0,0,1,3);
setLayout(formLayout);
addPlaneButton = new QPushButton(tr("Add plane"));
cancelButton = new QPushButton(tr("Cancel operation"));
movePlaneButton = new QPushButton(tr("Move plane"));
deletePlaneButton = new QPushButton(tr("Delete plane"));
rotatePlaneButton = new QPushButton(tr("Rotate plane"));
doneButton = new QPushButton(tr("Done"));
doneButton->setEnabled(false);
infoLabel = new QLabel(tr("Welcome to the plane editor"));
statusLabel = new QLabel();
formLayout->addWidget(statusLabel,1,0,1,3);
formLayout->addWidget(infoLabel,2,0,1,3);
formLayout->addWidget(addPlaneButton,3,0);
formLayout->addWidget(movePlaneButton,3,1);
formLayout->addWidget(deletePlaneButton,3,2);
formLayout->addWidget(rotatePlaneButton,4,0);
formLayout->addWidget(cancelButton,4,1);
formLayout->addWidget(doneButton, 4,2);
formLayout->removeWidget(addPlaneButton);
formLayout->removeWidget(cancelButton);
formLayout->removeWidget(movePlaneButton);
formLayout->removeWidget(deletePlaneButton);
formLayout->removeWidget(rotatePlaneButton);
formLayout->removeWidget(doneButton);
formLayout->removeWidget(infoLabel);
formLayout->removeWidget(statusLabel);
delete addPlaneButton;
delete cancelButton;
delete movePlaneButton;
delete deletePlaneButton;
delete rotatePlaneButton;
delete doneButton;
delete infoLabel;
delete statusLabel;
resize(sizeHint());
return QSize(m_rowNo*spacing, m_colNo*spacing)+QSize(31,31);
最佳答案
activate()
其sizeHint()
之前的布局,然后是小部件的 sizeHint()
,在修改布局的小部件后立即更新。 layout->removeWidget()
是多余的。只需delete
不需要的小部件。 Qt 处理 QWidget 层次结构中的所有内存分配。删除 QWidget 而不告诉 Qt 端的任何人是安全的。当然也有正常的异常(exception):例如,您不能删除其方法位于调用堆栈中某处的小部件。 resize()
,您可以在小部件的布局上设置适当的大小约束。例如:layout->setSizeConstraint(QLayout::SetFixedSize);
sizeHint()
中的内容。 . void removeButtons() {
delete addPlaneButton;
delete cancelButton;
delete movePlaneButton;
delete deletePlaneButton;
delete rotatePlaneButton;
delete doneButton;
delete infoLabel;
delete statusLabel;
formLayout->activate();
resize(sizeHint());
}
关于qt - 布局 sizeHint qwidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11086801/
我正在创建一个小部件,其中包含一个国际象棋 table 和六个按钮,这些按钮显示在国际象棋 table 下方的 2 行中。按钮行比棋盘宽。国际象棋表和按钮位于 QGridLayout 中。 Chess
我有一个 QAbstractItemDelegate 并且在 paint 方法中,我试图从标签中绘制文本。但我看到的问题是 QLabel 的大小提示对于它包含的文本来说总是太小。我怎样才能解决这个问题
我在 QSplitter 中有 QListView 和 QTabWidget。 QListView 正在使用自定义模型和自定义委托(delegate)。在委托(delegate)中,我重新实现了 pa
我有一个 QListView 有很多不同高度的项目。我实现了一个自定义委托(delegate)来绘制项目并将布局模式设置为批处理。 但是,当分配模型时, ListView 会预先为模型中的每个项目请求
我有两个小部件彼此相邻,WidgetA 和 WidgetB,在 QDialog 上,带有水平布局管理器。我正在尝试执行以下尺寸/调整尺寸政策: 对于 WidgetA: 水平方向:宽度应为 900,并且
我有一个启用了自动换行的自定义 QLabel。调整 MyWidget 的大小时,它会换行,但 sizeHint() 仍返回原始高度。 我尝试了这篇文章中的修复:QLabel cutting off t
我正在使用自定义编译的 Qt 库版本 4.8.5 和 MinGW GCC 4.8.2 以及 Qt Creator 3.0.1,我试图在中央小部件下的水平拆分器内设置两个选项卡小部件的 sizeHint
我想在布局中排列一堆 QPushButton,以便它们水平换行(如文本)。我正在尝试在 PySide2 中使用 Qt 示例 FlowLayout。 我发布了一个简单的示例 revision 2 her
背景 我正在 Python 2.7.6 中解析非常大的文本文件(30GB+)。为了稍微加快这个过程,我将文件分成 block ,并使用多处理库将它们分配给子进程。为此,我在主进程中迭代文件,记录要分割
我从 Swift 移植了一个带有可变高度单元格的 TableView 实现。但在我的 Xamarin/ReactiveUI 实现中,单元格不会在内容增长时调整大小(即显示可选标签时)。请注意,单元格会
来自 Rust 标准库 implementation of unzip : fn unzip(self) -> (FromA, FromB) where FromA: Default + Ex
因此,我使用 createWindowContainer 将自定义 QWindow 包装在一个小部件中。默认情况下,这会给出一个无效的大小提示 (-1),因为 QWindow 不在布局中。此外,QWi
我在 QTreeView 中有一个自定义的 QItemDelegate 绘图文本。在 paint() 中,我从样式中获取单元格的大小。然后,我使用当前单元格的宽度绘制带有自动换行的文本。 在sizeH
我有QTableView使用 QSqlQueryModel (它从 SQLite 中获取数据)。 有一个QStyledItemDelegate名为 MiniItemDelegate 的子类,我将其用作
我是一名优秀的程序员,十分优秀!