0

我想从队列中检索人名列表,并为每个人使用 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'] 的东西。

4

2 回答 2

1

这一行:

QtGui.QCheckBox('%s' % item, self.chk_People)

不将复选框添加到列表视图中,它仅以列表视图为父级创建它,并且有很大的不同。

使用列表视图最简单的方法是QListWidget便捷类。为此,将您的复选框创建为实例,QListWidgetItem然后addItem在列表小部件上使用以将它们真正添加到其中。

您在将它们添加到网格布局时遇到问题吗?通常,如果您拥有的复选框数量很少,则网格布局可能会更好 - 这完全取决于您希望应用程序的外观。但是如果你可能有很多这样的对象,那么列表小部件/视图是最好的。

于 2009-10-30T05:21:34.893 回答
0

我无法告诉您 PyQt 中的解决方案,但您需要遵循的结构如下。QListView 可以做你需要的,你不需要创建单独的复选框。创建 or 的子类QAbstractItemModelQStandardItemModel取决于您要进行多少编码)覆盖该flags()方法以返回适当的标志,包括 Qt::ItemIsUserCheckable,在columncount()方法中添加一个额外的列以包含复选框,并在data您想要复选框的列的方法中出现返回选中状态Qt::CheckedQt::UncheckedQt::CheckStateRole.

这也可以使用QListWidgetQListWidgetItem用于添加数据且无需创建模型的位置来完成。在QListWidgetItem您可以使用setFlags()setData(QVariant(bool, Qt::CheckStateRole)无需子类化模型的情况下

于 2009-10-30T02:53:01.630 回答