QWidget::layout() 不能 return QGridLayout?

QWidget::layout() can't return QGridLayout?

我有一个包含 QGridLayout 的 QWidget,而 QGridLayout 又包含一些 QPushButton。这些都是以编程方式生成的。在代码的后面(与定义布局的地方分开),我需要能够向布局中的特定 row/column 位置添加更多按钮。

我尝试使用:widget->layout()->addWidget(button, row, col) 来引用布局并添加按钮。但是,widget->layout() 只是 returns 一个通用的 QLayout 项,它不允许我指定行值和列值。有没有什么方法可以从特定的小部件引用 QGridLayout,而不必通过名称知道布局?如果它有所作为,我正在使用 Qt 4.8。

您始终可以通过 dynamic_cast:

将其转换为 QGridLayout*
auto gridLayout = dynamic_cast<QGridLayout*>(widget->layout());

如果您确定 widget->layout() 指向您的 QGridLayout,则无需检查并可以使用 static_cast。否则,检查 gridLayoutnullptr.