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!