基本上我的意思是当您双击 QTreeView 中的某些内容时,您可以选择重命名该项目。
使用 的setFlags()
功能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();
}
将Qt::ItemIsEditable
标志与现有标志进行或运算很重要,否则您最终会得到禁用的项目。例如,以下是与现有标志进行 OR'ing 后的标志:
QFlags<Qt::ItemFlags>(ItemIsSelectable|ItemIsEditable|ItemIsDragEnabled|ItemIsDropEnabled|ItemIsEnabled)
并且没有现有的:
QFlags<Qt::ItemFlags>(ItemIsEditable)
当用户完成名称编辑后,我需要一个信号来告诉我树中的索引或已编辑的 QStandardItem,以便我可以更改附加到 QStandardItem 的特定项目名称。
您可以连接到以下dataChanged()
信号QStandardItemModel
:
QObject::connect(&model, SIGNAL(itemChanged(QStandardItem*)),
&myObject, SLOT(onItemChanged(QStandardItem*)));