Qt 在运行时访问布局

Qt 在运行时访问布局,qt,Qt,我创建了一些对话框,在这个对话框上我有一个由几个复选框组成的垂直布局。我希望在运行时通过包含复选框的布局访问这些复选框。这可能吗?如果您有一个名为myDialog的对话框,您可以通过 myDialog->layout() 布局本身继承自QObject,类似的,它可以访问该方法 例如,您可以这样做: QCheckBox* currentCheckBox; foreach( QObject* child, myDialog->layout()->children() ) {

我创建了一些对话框,在这个对话框上我有一个由几个复选框组成的垂直布局。我希望在运行时通过包含复选框的布局访问这些复选框。这可能吗?

如果您有一个名为
myDialog
的对话框,您可以通过

myDialog->layout()
布局本身继承自QObject,类似的,它可以访问该方法

例如,您可以这样做:

QCheckBox* currentCheckBox;
foreach( QObject* child, myDialog->layout()->children() )
{
    currentCheckBox = qobject_cast< QCheckBox* >( child );
    if( !currentCheckBox ) continue;

    // do anything with the checkbox here
}
QCheckBox*currentCheckBox;
foreach(QObject*child,myDialog->layout()->children())
{
currentCheckBox=qobject\u cast(子项);
如果(!currentCheckBox)继续;
//对这里的复选框执行任何操作
}

@Tim:我有一个类似的问题,发现你的答案非常有用

但至少使用PyQt4,我发现布局本身似乎没有子元素(
children()
给出了一个空列表)——相反,它们是布局所在的小部件的“父对象”

因此,在Python中,这将是
myDialog.children()
,而不是
myDialog.layout().children()

然后,很明显,在这些孩子中可能有其他元素,不一定来自我们的布局(至少在我的例子中有)

此外,在更一般的情况下,虽然我认为复选框不太可能是这样

因此,我宁愿使用布局的
.itemAt()
方法

我想C++中会有类似< /P>的东西。
for( int i=0; ++i; i<layout->count() ) 
{
    widget = layout->itemAt(i)->widget()
    // ... do whatever you want
}
也许在第三季度和第四季度之间发生了一些变化

for i in xrange( layout.count() ) :  

    widget = layout.itemAt( i ).widget()
    # ... whatever )