You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否让QStandardItem在一个视图可编辑,另一个视图不可编辑?

问题分析与解决方案

首先得明确:你原代码里的逻辑有问题——QStandardItem不能同时属于两个QStandardItemModel,当你把同一个item加到第二个模型时,它会自动从第一个模型中移除(因为每个项只能有一个父项),最终只有第二个模型里有这个项,两个视图不会同时显示同一个项。

要实现“两个视图都能查看,仅一个可编辑”,有两种靠谱的实现方式:


方法一:共享同一个模型(推荐)

这种方式最简单,数据天然同步,只需要控制其中一个视图的编辑权限即可:

代码示例

from PyQt5.QtWidgets import QApplication, QTreeView, QStandardItemModel, QStandardItem
import sys

app = QApplication(sys.argv)

# 创建单个模型和项
item_model = QStandardItemModel()
item = QStandardItem("my item")
item_model.appendRow(item)

# 视图1:默认可编辑
view_1 = QTreeView()
view_1.setModel(item_model)
view_1.show()

# 视图2:仅查看不可编辑
view_2 = QTreeView()
view_2.setModel(item_model)
# 禁用所有编辑触发行为
view_2.setEditTriggers(QTreeView.NoEditTriggers)
view_2.show()

sys.exit(app.exec_())

关键说明

  • 两个视图绑定同一个模型,数据自动同步,修改其中一个视图的内容,另一个会立刻更新。
  • 通过setEditTriggers(QTreeView.NoEditTriggers)直接禁用视图2的编辑功能,操作简单直接。

方法二:使用两个独立模型(需手动同步)

如果因为某些原因必须用两个模型,那需要复制项,设置其中一个项不可编辑,同时监听模型的dataChanged信号来同步两个模型的内容:

代码示例

from PyQt5.QtWidgets import QApplication, QTreeView, QStandardItemModel, QStandardItem
from PyQt5.QtCore import Qt
import sys

app = QApplication(sys.argv)

# 创建第一个模型(可编辑)
item_model_1 = QStandardItemModel()
item_1 = QStandardItem("my item")
item_model_1.appendRow(item_1)

# 创建第二个模型(仅查看)
item_model_2 = QStandardItemModel()
item_2 = QStandardItem(item_1.text())
# 移除项的可编辑标志
item_2.setFlags(item_2.flags() & ~Qt.ItemIsEditable)
item_model_2.appendRow(item_2)

# 监听第一个模型的变化,同步到第二个模型
def sync_to_model_2(index, _):
    if index.column() == 0:
        item_2.setText(index.data())

item_model_1.dataChanged.connect(sync_to_model_2)

# 视图1:绑定可编辑模型
view_1 = QTreeView()
view_1.setModel(item_model_1)
view_1.show()

# 视图2:绑定不可编辑模型
view_2 = QTreeView()
view_2.setModel(item_model_2)
view_2.show()

sys.exit(app.exec_())

关键说明

  • 两个模型用独立的QStandardItem,避免了同一个项属于多个模型的冲突问题。
  • 给item_2移除ItemIsEditable标志,确保它无法被编辑。
  • 通过dataChanged信号监听第一个模型的修改,同步到第二个模型,保证两个视图显示内容一致。

内容的提问来源于stack exchange,提问作者DJames

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 15:25:04