QTreeWigetItem — Как управлять кликом, чтобы напрямую изменить название текста элемента

Я создал QTreeView и подал QTreeWidgetItem. Мое приложение — это своего рода файловый браузер.

ViewTree определяется как показано ниже:

void MainWindow::createTreeView()
{
TreeViewSection = new QWidget();

QVBoxLayout *TreeViewLayout = new QVBoxLayout(TreeViewSection);

MyTree = new TreeWidget();
contextMenu = new QMenu(MyTree);
MyTree->setContextMenuPolicy(Qt::ActionsContextMenu);

addFolderAction = new QAction("Add Folder", contextMenu);
MyTree->addAction(addFolderAction);
connect(addFolderAction, SIGNAL(triggered()),this,SLOT(onAddFolderAction()));

deleteAction = new QAction("Delete", contextMenu);
MyTree->addAction(deleteAction);
connect(deleteAction, SIGNAL(triggered()),this,SLOT(onDeleteAction()));

MyTree->setSortingEnabled(true);
MyTree->setColumnWidth(0, 400);

headerItem = new QTreeWidgetItem();

headerItem->setText(0,QString("File Name"));
headerItem->setText(1,QString("Last Modified"));
headerItem->setText(2,QString("Size"));
MyTree->setHeaderItem(headerItem);

MyTree->setAcceptDrops(true);
MyTree->setDragEnabled(true);
MyTree->setDragDropMode(QAbstractItemView::InternalMove);
MyTree->setDefaultDropAction(Qt::MoveAction);
MyTree->setDropIndicatorShown(true);
MyTree->setDragDropOverwriteMode(true);
MyTree->setSelectionMode(QAbstractItemView::SingleSelection);

TreeViewLayout->addWidget(MyTree);

}

Я добавил кнопку «Добавить папку», как определено ниже для действия:

void MainWindow::onAddFolderAction()
{
QList<QTreeWidgetItem *> item;
uint32_t index;

item = MyTree->selectedItems();
if (item.empty())
index = 0;
else {
QString str = item[0]->text(0);
QByteArray latin_str = str.toLatin1();
char *utf8_text = latin_str.data();

index = m_device.getIdByName(utf8_text);
}
if(m_device.isFolder(index) == true) {
QTreeWidgetItem* child = new QTreeWidgetItem();
child->setText(0, "NewFolder");
child->setText(1, "--");
child->setText(2, "--");

item[0]->addChild(child);
item[0]->setExpanded(true);
//item[0]->setSelected();

// MyTree-> edit (selectedItem ());

        m_device.CreateNewFolder("New Folder", index);
}
}

Как видите, по умолчанию я создаю «NewFolder», который в системе mtp FS.

Что бы я хотел сделать перед созданием папки, я бы хотел иметь возможность переименовать «NewFolder» в то, что хочет пользователь. Я не хочу создавать всплывающее окно для ввода текста. То, что я хочу, — это «своего рода переименование» поведения. Папка появляется в виде дерева, выбирается новая папка, и текст может быть изменен напрямую. Как и в Finder, когда вы сделали один клик по имени папки, оно стало выбранным, и пользователь может изменить имя в Finder без всплывающих окон.

Спасибо

1

Решение

Если вы хотите отредактировать элемент сразу после его создания, вы сможете добиться этого просто вызов редактора в теме:

QTreeWidgetItem* child = new QTreeWidgetItem();
child->setText(0, "NewFolder");
child->setText(1, "--");
child->setText(2, "--");
child->setFlags(child->flags() | Qt::ItemIsEditable);

item[0]->addChild(child);
item[0]->setExpanded(true);

MyTree->editItem(child);
1

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


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