Добавление контекстного меню для определенных элементов в QTreeView
Я пишу приложение рабочего стола Qt в С++ с Qt Creator.
В своем главном окне я объявил treeView и совместимую модель.
Теперь я хотел бы иметь контекстное меню для элемента дерева. Не для всех элементов, но для их части, например: для элементов дерева с четным индексом.
Я попытался добавить простое контекстное меню со следующим кодом:
в файле .h:
QStandardItemModel* model;
QMenu* contextMenu;
QAction* uninstallAction;
private slots:
void uninstallAppletClickedSlot();
и в файле .cpp:
в конструкторе:
ui->treeView->setModel(model);
contextMenu = new QMenu(ui->treeView);
ui->treeView->setContextMenuPolicy(Qt::ActionsContextMenu);
uninstallAction = new QAction("Uninstall TA",contextMenu);
ui->treeView->addAction(uninstallAction);
connect(uninstallAction, SIGNAL(triggered()), this, SLOT(uninstallAppletClickedSlot()));
и слот:
void MainWindow::uninstallAppletClickedSlot()
{
}
этот код дает мне контекстное меню с требуемым действием, но есть ли у вас какие-либо идеи, как добавить это действие только для QStandardItem
с четными индексами?
Кстати, я добавляю элементы в treeView следующим образом:
void MainWindow::AddItem(QString name)
{
QStandardItem *parentItem = model->invisibleRootItem();
QStandardItem *app = new QStandardItem(name);
parentItem->appendRow(app);
}
Я много гугл, но ничего не нашел: (
заблаговременно!
Ответы
Ответ 1
Я бы сделал это следующим образом:
Настроить контекстное меню
ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->treeView, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onCustomContextMenu(const QPoint &)));
Реализовать обработку контекстного меню
void MainWindow::onCustomContextMenu(const QPoint &point)
{
QModelIndex index = ui->treeView->indexAt(point);
if (index.isValid() && index.row() % 2 == 0) {
contextMenu->exec(ui->treeView->mapToGlobal(point));
}
}