Dodawanie menu kliknięcia prawym przyciskiem myszy dla określonych pozycji w QTreeView

Piszę aplikację QT desktop w c++ z Qt Creator.

Zadeklarowałem w głównym oknie Podgląd drzewa i Zgodny model.

Teraz chciałbym mieć menu prawym przyciskiem myszy dla elementu drzewa. Nie dla wszystkich elementów, ale dla ich części, na przykład: dla elementów drzewa z parzystym indeksem.

Próbowałem dodać proste menu kontekstowe z następującym kodem:

W ...plik h:

QStandardItemModel* model;
QMenu* contextMenu;
QAction* uninstallAction;
private slots:
    void uninstallAppletClickedSlot();

I w .cpp plik:

W konstruktorze:

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()));

Oraz slot:

void MainWindow::uninstallAppletClickedSlot()
{

}

Ten kod daje mi menu kontekstowe z poszukiwaną akcją, ale czy masz jakiś pomysł, jak Mogę dodać tę akcję tylko dla QStandardItem S z parzystymi indeksami??

BTW, dodaję pozycje do treeView w następujący sposób:

void MainWindow::AddItem(QString name)
{
QStandardItem *parentItem = model->invisibleRootItem();
QStandardItem *app = new QStandardItem(name);
parentItem->appendRow(app);
}

Dużo googlowałem, ale nic nie znalazłem: (

Z góry dzięki!

Author: user1835297, 2014-03-05

1 answers

Zrobiłbym to w następujący sposób:

Konfiguracja menu kontekstowego

ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->treeView, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onCustomContextMenu(const QPoint &)));

Zaimplementuj obsługę menu kontekstowego

void MainWindow::onCustomContextMenu(const QPoint &point)
{
    QModelIndex index = ui->treeView->indexAt(point);
    if (index.isValid() && index.row() % 2 == 0) {
        contextMenu->exec(ui->treeView->viewport()->mapToGlobal(point));
    }    
}
 42
Author: vahancho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-11 20:58:44