我一直在寻找相当长的一段时间,而且我还没有找到尝试在QTreeView中重命名项目的解决方案。基本上我的意思是,当您在QTreeView中双击某些内容时,您可以选择重命名该项目。当用户完成编辑名称时,我需要一个信号,告诉我树中的索引或编辑的QStandardItem,这样我就可以更改附加到QStandardItem的特定项目名称。
这可能有点模糊,我无法真正提供我的来源,因为它需要我给你我的整个项目,这是几个演出。 如果你需要我解释其他任何我会尽我所能的事情,我还会包括一个我正在谈论的图像,以便更好地理解。
答案 0 :(得分:0)
基本上我的意思是,当您在QTreeView中双击某些内容时,您可以选择重命名该项目。
使用DESTDIR
的{{3}}功能设置QStandardItem
:
Qt::ItemIsEditable
将#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow w;
QTreeView *treeView = new QTreeView;
QStandardItemModel model(4, 1);
for (int row = 0; row < 4; ++row) {
QStandardItem *item = new QStandardItem(QString("row %0").arg(row));
item->setFlags(item->flags() | Qt::ItemIsEditable);
model.setItem(row, 0, item);
}
treeView->setModel(&model);
w.setCentralWidget(treeView);
w.show();
return a.exec();
}
标志与现有标志进行“或”非常重要,否则您将最终使用已禁用的项目。例如,以下是与现有OR进行OR运算后的标志:
Qt::ItemIsEditable
没有现有的:
QFlags<Qt::ItemFlags>(ItemIsSelectable|ItemIsEditable|ItemIsDragEnabled|ItemIsDropEnabled|ItemIsEnabled)
当用户完成编辑名称时,我需要一个信号,告诉我树中的索引或编辑的QStandardItem,这样我就可以更改附加到QStandardItem的特定项目名称。
您可以连接到QFlags<Qt::ItemFlags>(ItemIsEditable)
的{{1}}信号:
dataChanged()