1

我已经四处寻找了很长一段时间,但我一直无法找到尝试重命名 QTreeView 中的项目的解决方案。基本上我的意思是当您双击 QTreeView 中的某些内容时,您可以选择重命名该项目。当用户完成名称编辑后,我需要一个信号来告诉我树中的索引或已编辑的 QStandardItem,以便我可以更改附加到 QStandardItem 的特定项目名称。

这可能有点含糊,我不能真正提供我的来源,因为它需要我给你我的整个项目,这是几场演出。如果您需要我解释其他任何内容,我会尽力而为,我还会附上我正在谈论的内容的图像,以便更好地理解。

双击重命名

4

1 回答 1

0

基本上我的意思是当您双击 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*)));
于 2015-11-28T08:05:09.267 回答