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

时间:2017-03-07 13:31:03

标签: c++ qt qt-creator qpushbutton

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

这是我的代码(没有工作)

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

我有以下错误:

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

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

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

这个怎么样:

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

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

它是QObject的成员函数,step2Layout派生自QMainWindow。你是从<?php $v8 = new V8Js(); $react = []; // stubs, react $react[] = "var console = {warn: function(){}, error: print}"; $react[] = "var global = {}"; $react[] = file_get_contents('./dist/react.js'); $react[] = "var React = global.React"; $react[] = file_get_contents('./dist/bundle.js'); $data = [ 'value' => 1, 'onClick' => 'function' ]; $react[] = sprintf( "React.renderComponentToString(Square({data: %s}), print)", json_encode($data)); $react = implode(";", $react); try { $v8->executeString($react); } catch(V8JsException $e) { echo " File: {$e->getJsFileName()} \n Line Number: {$e->getJsLineNumber()} \n Source Line: {$e->getJsSourceLine()} \n Trace: {$e->getJsTrace()} "; } 调用它的,这就是你得到所有Window按钮的原因。

答案 1 :(得分:0)

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

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

然后你认为是布局的孩子的按钮实际上不是,它是这个隐藏的小部件的孩子。

pushButton = new QPushButton(verticalLayoutWidget);

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