我想从队列中检索人名列表,并且对于每个人,使用addWidget()函数将一个带有名称的复选框放到QGridLayout。我可以成功地将项目放在QListView中,但它们只是写在彼此的顶部而不是创建一个新行。有没有人对如何解决这个问题有任何想法?
self.chk_People = QtGui.QListView()
items = self.jobQueue.getPeopleOffQueue()
for item in items:
QtGui.QCheckBox('%s' % item, self.chk_People)
self.jobQueue.getPeopleOffQueue()会返回类似['Bob','Sally','Jimmy']的内容,如果有帮助的话。
答案 0 :(得分:1)
这一行:
QtGui.QCheckBox('%s' % item, self.chk_People)
不会将复选框添加到列表视图中,它只会以列表视图作为父项创建它,并且存在很大差异。
使用列表视图的最简单方法是QListWidget
便利类。为此,请将复选框创建为QListWidgetItem
的实例,然后在列表小部件上使用addItem
将其添加到其中。
将它们添加到网格布局中是否有问题?通常,如果您拥有的复选框数量较少,则网格布局可能会更好 - 这一切都取决于您希望应用的外观。但是如果你可能有很多这样的对象,那么列表小部件/视图是最好的。
答案 1 :(得分:0)
我无法告诉你PyQt中的解决方案,但你需要遵循的结构如下。 QListView可以执行您需要的操作,您无需创建单独的复选框。创建QAbstractItemModel
或QStandardItemModel
的子类(取决于您想要做多少编码)覆盖flags()
方法以返回适当的标志,包括 {{ 3}},在columncount()
方法中添加一个额外的列以包含复选框,并在data
方法中为您希望复选框显示的列返回已选中状态Qt::Checked
,{对于Qt::Unchecked
{1}}。
这也可以使用Qt::ItemIsUserCheckable
来完成,您可以使用QListWidget
添加数据,而无需创建模型。在Qt::CheckStateRole
上,您可以使用QListWidgetItem
和setFlags()
,而无需继承模型