我已经创建了一些对话框,在这个对话框中我有一个由几个复选框组成的垂直布局。我想通过包含它们的布局在运行时访问这些复选框。这可能吗?
答案 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之间有什么变化吗?