qt c++ 自定义树模型 模型flags 并未设置为ItemIsEditable, 右击菜单 建立重命名QAction
时间: 2024-02-11 19:08:36 浏览: 74
如果你想要在自定义的树模型中实现编辑节点名称的功能,可以按照以下步骤进行:
1. 在自定义的树模型中重写flags()函数,将要编辑的节点的flags设置为ItemIsEditable,例如:
```cpp
Qt::ItemFlags MyTreeModel::flags(const QModelIndex &index) const
{
if (!index.isValid())
return Qt::NoItemFlags;
Qt::ItemFlags flags = QAbstractItemModel::flags(index);
if (index.column() == 0)
flags |= Qt::ItemIsEditable;
return flags;
}
```
2. 在自定义的树模型中重写setData()函数,接收用户修改后的节点名称,并更新数据模型,例如:
```cpp
bool MyTreeModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if (role != Qt::EditRole)
return false;
MyTreeNode *node = static_cast<MyTreeNode*>(index.internalPointer());
node->setName(value.toString());
emit dataChanged(index, index);
return true;
}
```
3. 在树视图中,将右击菜单的“重命名”QAction连接到一个槽函数,槽函数中调用edit()函数启动编辑模式,例如:
```cpp
void MyTreeView::renameItem()
{
QModelIndex index = currentIndex();
if (index.isValid())
edit(index);
}
```
这样,用户就可以在树视图中右击要编辑的节点,选择“重命名”菜单,然后就可以编辑节点名称了。
阅读全文