使用Qt4的模型/视图框架,我将项目列表显示为“ Foo(38条)”。我想使文本可编辑,但是当用户开始编辑时,我希望控件仅显示“ Foo”(名称),然后在编辑完成后恢复额外的信息“(38条)”。
我想我可以解决如何添加信息的问题,但是在编辑开始时是否可以更改项目的文本?
该模型是QStandardItemModel,而这些项是QStandardItem的相当琐碎的子类。它们主要显示在QListView中。
UI是用PyQt编写的,我不希望仅为此而投入C ++,但是如果出现C ++解决方案,我会尽力翻译。
最佳答案
在@Chris使我走上正确的轨道后,我发现了此注释in the docs for QStandardItem:
默认实现将Qt :: EditRole和Qt :: DisplayRole视为
指相同的数据。
因此,我需要重写方法QStandardItem.data()
。我的Python代码如下所示:
def data(self, role=QtCore.Qt.UserRole+1):
if role == QtCore.Qt.DisplayRole:
return "{} ({} bars)".format(self.name, len(self.ds))
return super().data(role) # Fall back to the default method
在模型的
itemChanged
信号上,我更新了正在使用的.name属性:def update_name(self):
self.name = self.data(QtCore.Qt.EditRole)
最后,“条”的数量可以在其他位置更改,这将触发任何视图以更新项目。因此,更改之后,我调用了
item.emitDataChanged()
方法(docs)。完成此操作后,它似乎按预期工作。
关于qt - 开始编辑时更改QStandardItem的文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8760141/