opciones modificar menú editar contextual carpetas agregar qt right-click qtreeview qstandarditem

modificar - Agregar un menú contextual para elementos específicos en QTreeView



menu contextual word (1)

Haría esto de la siguiente manera:

Configurar el menú contextual

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

Implementar el manejo del menú de contexto

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

Estoy escribiendo una aplicación de escritorio Qt en C ++ con Qt Creator.

Decidí en mi ventana principal una treeView y un modelo compatible.

Ahora, me gustaría tener un menú de clic derecho para el elemento del árbol. No para todos los artículos, sino para una parte de ellos, por ejemplo: para los elementos del árbol con un índice par.

Intenté agregar un menú contextual simple con el siguiente código:

en el archivo .h:

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

y en el archivo .cpp:

en el constructor:

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

y una ranura:

void MainWindow::uninstallAppletClickedSlot() { }

este código me da un menú contextual con la acción deseada, pero ¿tienes alguna idea de cómo puedo agregar esta acción solo para QStandardItem s con los índices pares?

Por cierto, estoy agregando elementos a treeView de la siguiente manera:

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

Busqué en Google mucho, pero no encontré nada :(

¡gracias por adelantado!