在Qt布局中列出QCheckBox项目
问题描述:
我有一个只包含一堆复选框的布局,而不是手动查询每个项目的状态,我想循环布局中的项目,然后简单地抓住标签,如果它们处于活动状态。在Qt布局中列出QCheckBox项目
for i in xrange(self.qt_window.verticalLayout_cb.count()):
box = self.qt_window.verticalLayout_cb.itemAt(i)
print box
这里的问题是,它将它们作为QWidgetItem返回,而不是QCheckBox,因此我无法使用它们。也许我正在做这个错误的方式?
答
布局中复选框的所有权转移到包含布局的窗口小部件。
所以你可以从那里检查:
for x in widget.children():
if isinstance(x, QCheckBox):
if x.isChecked():
print x.text()
答
您可以用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
,一个QSpacerItem
或QWidgetItem
。这些都有一个widget()
方法(因为它们都继承QLayoutItem
),但假设一个小部件总是会被返回是不安全的。例如,spacer-item不包含小部件,因此它只会返回None
。
你使用listwidget? – 2015-04-02 08:37:47