我正在遍历我的数据,使用 addrow 到根节点或将其作为父节点(等等)。现在对于父级,如何修改父级中的第二个单元格以显示当前子级的数量,然后在添加更多子级时更新该单元格?
问问题
75 次
1 回答
1
一种可能的解决方案是使用模型中的rowsInserted
和rowsRemoved
信号来计算孩子的数量。另一方面,更简单的解决方案是使用委托:
import random
from PyQt5 import QtCore, QtGui, QtWidgets
class Delegate(QtWidgets.QStyledItemDelegate):
def initStyleOption(self, option, index):
super().initStyleOption(option, index)
if not index.parent().isValid() and index.column() == 1:
model = index.model()
sibling = index.sibling(index.row(), 0)
option.text = f"{model.rowCount(sibling)} childs"
def main():
app = QtWidgets.QApplication([])
model = QtGui.QStandardItemModel(0, 2)
for i in range(4):
item = QtGui.QStandardItem(f"parent-{i}")
model.appendRow(item)
view = QtWidgets.QTreeView()
delegate = Delegate(view)
view.setItemDelegate(delegate)
view.setModel(model)
view.resize(640, 480)
view.show()
def handle_timeout():
for i in range(4):
root_item = model.item(i)
for j in range(random.randint(3, 5)):
item = QtGui.QStandardItem(f"child-{i}-{j}")
root_item.appendRow(item)
view.expandAll()
QtCore.QTimer.singleShot(2 * 1000, handle_timeout)
app.exec_()
if __name__ == "__main__":
main()
于 2021-10-02T19:49:10.833 回答