Я уже некоторое время оглядываюсь по сторонам и не могу найти решение для попытки переименовать элементы в QTreeView. По сути, я имею в виду, что когда вы дважды щелкаете что-то в QTreeView, вы получаете возможность переименовать элемент. Когда пользователь завершит редактирование имени, мне нужен сигнал, который сообщит мне индекс в дереве или QStandardItem, который был отредактирован, чтобы я мог изменить это конкретное имя элемента, которое прикреплено к QStandardItem.
Это может быть немного расплывчато, я не могу действительно предоставить свой источник для этого, потому что это потребовало бы, чтобы я дал вам весь мой проект, который является парой концертов.
Если мне понадобится объяснить что-то еще, я постараюсь изо всех сил, я также добавлю изображение того, о чем я говорю, для лучшего понимания.
По сути, я имею в виду, что когда вы дважды щелкаете что-то в 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*)));
Других решений пока нет …