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 )