在运行时访问布局

时间:2011-11-22 10:54:48

标签: qt

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

2 个答案:

答案 0 :(得分:1)

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

访问其布局
myDialog->layout()

布局本身继承自QObject,并且可以访问QObject::children()方法。

例如,您可以这样做:

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

    // do anything with the checkbox here
}

答案 1 :(得分:0)

@Tim:有一个类似的问题,发现你的答案很有帮助。

但至少使用PyQt4我发现布局本身似乎没有子节点(children()给出一个空列表) - 相反,它们是我们布局所在的小部件的“父级”。

所以在Python中,那将是myDialog.children()而不是myDialog.layout().children()

然后,显然,这些孩子中可能还有其他元素,不一定来自我们的布局(至少在我的情况下有)。

此外,在更一般的情况下,the order of QObject's children could be unstable - 虽然我认为对于复选框,情况不太可能如此。

所以,我宁愿使用布局的.itemAt()方法。

我想在C ++中它会像

for( int i=0; ++i; i<layout->count() ) 
{
    widget = layout->itemAt(i)->widget()
    // ... do whatever you want
}

在Python中,它是

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

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

可能Qt3和Qt4之间有什么变化吗?