Переименование элементов QTreeView

Я уже некоторое время оглядываюсь по сторонам и не могу найти решение для попытки переименовать элементы в QTreeView. По сути, я имею в виду, что когда вы дважды щелкаете что-то в QTreeView, вы получаете возможность переименовать элемент. Когда пользователь завершит редактирование имени, мне нужен сигнал, который сообщит мне индекс в дереве или QStandardItem, который был отредактирован, чтобы я мог изменить это конкретное имя элемента, которое прикреплено к QStandardItem.

Это может быть немного расплывчато, я не могу действительно предоставить свой источник для этого, потому что это потребовало бы, чтобы я дал вам весь мой проект, который является парой концертов. Если вам нужно, чтобы я объяснил что-то еще, я постараюсь изо всех сил, я также включу изображение того, о чем я говорю, для лучшего понимания.

Двойной клик Переименование

1 ответ

По сути, я имею в виду, что когда вы дважды щелкаете что-то в 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 Флаг с существующими флагами важен, потому что в противном случае вы получите отключенные элементы. Например, вот флаги после ИЛИ с существующими:

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*)));
Другие вопросы по тегам