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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: (Решено)Дерево и контекстное меню  (Прочитано 3585 раз)
nvek
Гость
« : Февраль 08, 2017, 12:42 »

вопрос, как сделать что только при выделении в деревеВиджете, только двоих элементов и только определенных(они следующие от начала)
выскакивало определенное контекстное меню?  Непонимающий Непонимающий Непонимающий
« Последнее редактирование: Февраль 12, 2017, 11:18 от nvek » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



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

В слоте
connect(treeWidget, &QWidget::customContextMenuRequested, [&](const QPoint& pos) {
// ...
});
прописываете условия для возникновения такого меню/действий:

Я похожую фигню делал для дерева: https://github.com/gil9red/NotesManager/blob/90864c80674bdd88540eed9147b9c58d34fc355b/NavigationPanel/foldernavigationwidget.cpp#L861
там нужно было уметь различать папки и заметки, показывая разные действия
Записан

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

Спасибо за пример  Подмигивающий
Записан
nvek
Гость
« Ответ #3 : Февраль 10, 2017, 11:22 »

вот как я сделал: если элемент верхний и только один, то одно контекстное меню, если элемента два и они вторые (ниже верхнего) то другое контекстное меню
работает не совсем так как я хотел бы, а именно что у самого верхнего может быть два чилдрена, и по второму он не кликает, зато по первому от самого верхнего кликает.
Код:
void MainForm::treeContextMenu(const QPoint& pos)
{
QTreeWidgetItem* item = treeWidget->currentItem();

//количество выделенных элементов
int countItem = treeWidget->selectedItems().count();
if (countItem == 1)
{
int index = treeWidget->indexOfTopLevelItem(item);
if (!item || index == -1) {
return;
}
QMenu menu;
menu.addAction(closeDocumentAct);
QAction* a = menu.exec(QCursor::pos());
}
else if (countItem == 2)
{
QTreeWidgetItem *itemAbove = treeWidget->itemAbove(item); //это итем выше итема
int index = treeWidget->indexOfTopLevelItem(itemAbove);
if (!item || index == -1) {
return;
}
QMenu menu;
menu.addAction(statCompareAct);
QAction* a = menu.exec(QCursor::pos());
}
}
Записан
nvek
Гость
« Ответ #4 : Февраль 10, 2017, 11:23 »

вообщем надо чтобы на одном уровне находились...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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