2015-04-02 70 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