2015-04-02 25 views
0

我有一个只包含一堆复选框的布局,而不是手动查询每个项目的状态,我想循环布局中的项目,然后简单地抓住标签,如果它们处于活动状态。在Qt布局中列出QCheckBox项目

for i in xrange(self.qt_window.verticalLayout_cb.count()): 
    box = self.qt_window.verticalLayout_cb.itemAt(i) 
    print box 

这里的问题是,它将它们作为QWidgetItem返回,而不是QCheckBox,因此我无法使用它们。也许我正在做这个错误的方式?

+0

你使用listwidget? – 2015-04-02 08:37:47

回答

0

布局中复选框的所有权转移到包含布局的窗口小部件。

所以你可以从那里检查:

for x in widget.children(): 
    if isinstance(x, QCheckBox): 
     if x.isChecked(): 
      print x.text() 
0

您可以用QWidgetItem像这样的工作:

for i in xrange(self.qt_window.verticalLayout_cb.count()): 
    item = self.qt_window.verticalLayout_cb.itemAt(i) 
    widget = item.widget() 
    if isinstance(widget, QtGui.QCheckBox): 
     print(widget.text()) 

注意itemAt()可以返回QLayout,一个QSpacerItemQWidgetItem。这些都有一个widget()方法(因为它们都继承QLayoutItem),但假设一个小部件总是会被返回是不安全的。例如,spacer-item不包含小部件,因此它只会返回None