Russian Qt Forum
Ноябрь 24, 2024, 02:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: (Решено)Удалить нужную ветку дерева по нажатию контекстного меню  (Прочитано 2659 раз)
nvek
Гость
« : Февраль 08, 2017, 08:12 »

Добрый день
создал контекстное меню по нажатию на элемент
Код:
connect(treeWidget, &QWidget::customContextMenuRequested, [&](const QPoint& pos) 
{
QModelIndex mi = treeWidget->indexAt(pos);
if (!mi.isValid())
return;
QMenu menu;
menu.addAction(closeDocumentAct);
QAction* a = menu.exec(QCursor::pos());
});
акшин
Код:
closeDocumentAct = new QAction(closeDocumentIcon, CONTEXTCLOSE);
connect(closeDocumentAct, &QAction::triggered, this, &MainForm::closeDocument);

и сам слот
Код:
void MainForm::closeDocument(int index)
{

delete treeWidget->takeTopLevelItem(index);
}
вопрос, как передать слоту индекс элемента дерева, именно верхушки, чтобы потом его удалить
« Последнее редактирование: Февраль 08, 2017, 09:01 от nvek » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Февраль 08, 2017, 08:50 »

Код
C++ (Qt)
connect(closeDocumentAct, &QAction::triggered, this, &MainForm::closeDocument);
 

странная конструкция учитывая что void MainForm::closeDocument(int index)
, а у сигнала triggered такое описание: void QAction::triggered(bool checked = false)


Я бы делал так:
Код
C++ (Qt)
void MainForm::closeDocument() {
   // Проверка на наличие текущего элемента и того что он на верхнем уровне
   QTreeWidgetItem* item = treeWidget->currentItem();
   int index = treeWidget->indexOfTopLevelItem(item);
   if (!item || index == -1) {
       return;
   }
 
   delete treeWidget->takeTopLevelItem(index);
}

Писал в браузере, поэтому мог ошибиться
Кст, те проверки можно было спокойно перенести в слот создания меню и например, если условия не подходят то просто не показывать (блокировать) указанное действие


« Последнее редактирование: Февраль 08, 2017, 08:54 от gil9red » Записан

nvek
Гость
« Ответ #2 : Февраль 08, 2017, 09:00 »

шикарно, работает
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.086 секунд. Запросов: 23.