Saltar al contenido

QTreeWidget menú contextual

Solución:

Primero, configure QTreeWidget para responder (emitir señal) clic derecho del mouse:

treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);

En segundo lugar, conecte la señal con su ranura “MainWindow :: prepareMenu”:

connect(treeWidget,&QTreeWidget::customContextMenuRequested,this,&MainWindow::prepareMenu);

En tercer lugar, cree un menú contextual en la ranura:

void MainWindow::prepareMenu( const QPoint & pos )
{
QTreeWidget *tree = treeWid;

QTreeWidgetItem *nd = tree->itemAt( pos );

qDebug()<<pos<<nd->text(0);


QAction *newAct = new QAction(QIcon(":/Resource/warning32.ico"), tr("&New"), this);
newAct->setStatusTip(tr("new sth"));
connect(newAct, SIGNAL(triggered()), this, SLOT(newDev()));


QMenu menu(this);
menu.addAction(newAct);

QPoint pt(pos);
menu.exec( tree->mapToGlobal(pos) );
}

Primero debe establecer la política del menú contextual en CustomContextMenu:

treeView->setContextMenuPolicy(Qt::CustomContextMenu);

Entonces puedes conectarte al QWidget::customContextMenuRequested(const QPoint&) señal y muestra tu menú contextual.

Para aquellos que prefieren usar el diseñador más, aquí hay otra forma de hacerlo:

1) Establecer la política del menú contextual en el menú contextual personalizado

O por código:

ui->treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);

o usando el diseñador gráfico, haga clic en el widget de árbol y configúrelo usando el Editor de propiedades:

ingrese la descripción de la imagen aquí

2) Crear función de controlador

En el diseñador, haga clic con el botón derecho en el widget de árbol y seleccione la opción “Ir a la ranura …”. Aparecerá una ventana similar a esta:

ingrese la descripción de la imagen aquí

Haga clic en la opción “CustomContextMenuRequested (QPoint)”. La función del controlador se definirá, declarará y se conectará automáticamente.

void MainWindow::on_treeWidget_customContextMenuRequested(const QPoint &pos)
{
  // this function will be called on right click
}

Este paso también se puede realizar definiendo y conectando la función de ranura usted mismo.

3) Cree las opciones en el menú contextual.

ingrese la descripción de la imagen aquí

Vaya a la pestaña del editor de acciones (generalmente acoplada en la parte inferior del diseñador). Agregue las acciones que desea tener en el menú contextual haciendo clic en el botón nuevo en la parte superior izquierda. Encontrará una interfaz de este tipo:

ingrese la descripción de la imagen aquí

Puede (opcionalmente) tener una información sobre herramientas o un icono para la acción, o hacer que se pueda marcar. Puede crear un atajo como Ctrl + C para una acción de copia.

4) Crea el menú y enciéndelo

void MainWindow::on_treeWidget_customContextMenuRequested(const QPoint &pos)
{
    QMenu menu(this); // add menu items
    menu.addAction(ui->actionDelete);
    menu.addEdit(ui->actionDelete);
    ...

    ui->actionDelete->setData(QVariant(pos)); // if you will need the position data save it to the action

    menu.exec( ui->treeWidget->mapToGlobal(pos) );
}

5) Cree funciones de controlador para cada acción

Como en el paso 2, cree la función de ranura y conéctela manualmente, o haga clic con el botón derecho en una acción, haga clic en la opción “Ir a ranuras …” y seleccione la ranura activada ().

ingrese la descripción de la imagen aquí

6) Por último, aplique su lógica en la función de ranura

void MainWindow::on_actionEdit_triggered()
{
    QTreeWidgetItem *clickedItem = ui->treeWidget->itemAt(ui->actionDelete->data().toPoint());

    // your logic
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *