使用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/

10-14 12:55