如何获取特定布局的所有QPushButton

How to get all QPushButton of a specific layout

我想知道如何获取特定布局的所有 QPushButton。

这是我的代码(不起作用)

QList<QPushButton *> step2PButtons = findChildren<QPushButton *>(step2Layout);
for (auto *button: step2PButtons )
    button->setEnabled(false);

我有以下错误:

no matching function for call to 'MainWindow::findChildren(QVBoxLayout*&)'

我可以获取界面的所有元素,但无法获取特定布局的元素。

感谢您的帮助

这个怎么样:

QList<QPushButton*> step2PButtons = step2Layout->findChildren<QPushButton*>();
for(auto it = step2PButtons.begin(); it != step2PButtons.end(); ++it)
    (*it)->setEnabled(false);

我猜 step2Layout 是一个指向 QVBoxLayout 对象的指针。

它是 QObject 的成员函数,step2Layout 派生自该函数。您是从 QMainWindow 调用它的,这就是您获得所有 Window 个按钮的原因。

量子物理学家的答案是正确的,但缺少一个小细节:当您使用 Qt Designer 创建布局时,如果您查看生成的代码,您会看到它创建了一个 "hidden" QWidget,父级为布局:

QWidget *verticalLayoutWidget;
QVBoxLayout *verticalLayout;
[...]
verticalLayoutWidget = new QWidget(centralWidget);

那么您认为是布局子项的按钮实际上不是,它是这个隐藏小部件的子项。

pushButton = new QPushButton(verticalLayoutWidget);

如果将 step2Layout->findChildren<QPushButton*>(); 替换为 step2Layout->parentWidget()->findChildren<QPushButton*>();,您应该获得布局中的按钮并可以在循环中处理它们。