我想知道如何获取特定布局的所有QPushButtons。
这是我的代码(没有工作)
QList<QPushButton *> step2PButtons = findChildren<QPushButton *>(step2Layout);
for (auto *button: step2PButtons )
button->setEnabled(false);
我有以下错误:
no matching function for call to 'MainWindow::findChildren(QVBoxLayout*&)'
我可以获取界面的所有元素,但我无法获取特定布局的元素。
感谢您的帮助
答案 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*>();
,您应该获得布局中的按钮,并且可以在循环中处理它们。