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

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

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

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

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

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*)));
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]