如何获取特定布局的所有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*>();
,您应该获得布局中的按钮并可以在循环中处理它们。
我想知道如何获取特定布局的所有 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*>();
,您应该获得布局中的按钮并可以在循环中处理它们。