Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: nvek от Февраль 08, 2017, 12:42



Название: (Решено)Дерево и контекстное меню
Отправлено: nvek от Февраль 08, 2017, 12:42
вопрос, как сделать что только при выделении в деревеВиджете, только двоих элементов и только определенных(они следующие от начала)
выскакивало определенное контекстное меню?  ??? ??? ???


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

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


Название: Re: Дерево и контекстное меню
Отправлено: nvek от Февраль 09, 2017, 06:16
Спасибо за пример  ;)


Название: Re: Дерево и контекстное меню
Отправлено: nvek от Февраль 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());
}
}


Название: Re: Дерево и контекстное меню
Отправлено: nvek от Февраль 10, 2017, 11:23
вообщем надо чтобы на одном уровне находились...