que estoy trabajando en un proyecto uni y nuestro objetivo es hacer un programa que escanea todos los archivos img/vídeo/película en un directorio seleccionado, los almacena en una base de datos y luego los shozs de una manera organizada (usando QTreeWidgetItem). El programa le permite hacer algunas cosas como leer los archivos, abrirlos, etc. Ahora, el problema es que me gustaría hacer clic con el botón derecho en uno de los archivos y abrir un menú con muchas opciones como Abrir el directorio, eliminar el archivo ...que desea implementar menús Haga clic derecho sobre QTWidgetItems
Simplemente no sé cómo hacer ese clic derecho en el menú, soy un poco nuevo a QT, he intentado hacer esto:
connect(treeWidget, SIGNAL(itemClicked(QTreeWidgetItem *, int)), this, SLOT(openMenu(QTreeWidgetItem *, int)));
me trataron redifining el método itemClicked pero parece que no puede encontrar la manera de saber si se trata de un clic derecho y creo que podría estar tratando de que la Sentido Contrario.
me inspiró de esto:
connect(treeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(opennMusic(QTreeWidgetItem *, int)));
que ejecuta un archivo de música en el doble clic.
Si necesita más partes de código, hágamelo saber :).
Edición después el último comentario de Andy para mostrar nuevo código:
#include "affichagemusique.h"
void AffichageMusique::lireMusique(QTreeWidgetItem *item, int column)
{
if(item->text(6)!=NULL)
{
Phonon::MediaSource source(item->text(6));
mediaObject->setCurrentSource(source);
mediaObject->play();
}
}
void AffichageMusique::vueArtiste()
{
layout->removeWidget(treeWidget);
treeWidget = new QTreeWidget();
QAction* pOpenDir = new QAction(tr("Play music"),treeWidget);
treeWidget->setContextMenuPolicy(Qt::ActionsContextMenu);
treeWidget->addAction(pOpenDir);
.......
}
// later on on the code
void AffichageMusique::pOpenDir()
{
QTreeWidget * treeWidget = new QTreeWidget();
QTreeWidgetItem * QTreeWidgetI= treeWidget->currentItem();
lireMusique(QTreeWidgetI, 6);
}
Incluso si quito el QTreeWidget * = treeWidget nueva QTreeWidget(); línea no funcionará, veo el menú cuando hago clic con el botón derecho pero cuando hago clic en Hacer, no pasa nada.
¡Hola! ¡Gracias por su respuesta! ¿Y dónde debería definir pOpenFile? supongo que tendré que poner el mismo código que tengo en opennMusic (QTreeWidgetItem *, int) (excepto que no tengo los parámetros, entonces: /) Aunque en su mayoría solo necesito abrir un menú donde Puedo hacer clic en Abrir directorio objetivo utilizando la ruta de acceso almacenada en la base de datos, lamentablemente, a menos que esté equivocado, QT solo le permite buscar y seleccionar archivos de directorios, pero en realidad no los abre: /. – magnus
Erm, sugeriría crear un método openFile que escanea el árbol, buscando el SelectedItem. Luego, dependiendo de los elementos seleccionados, puede obtener con toda seguridad su "ruta" ... Entonces, crearía el OpenFile en su ventana principal, (supongo que es el padre de su treewidget) ... Cuando se desencadena la acción (haga clic derecho en el menú, acceso directo o cualquier cosa) puede escanear en busca de elementos seleccionados y realiza el comportamiento correcto ... Una vez que tenga los elementos seleccionados, esto puede ayudarlo (supongo que usa QDirModel): QSirding QDirModel :: filePath (const QModelIndex & index) const –
ok, haga clic con el botón derecho del menú usando el código que me dio. Parece que esta atm: treeWidget = new QTreeWidget(); QAction * pOpenFile = new QAction (tr ("Open repertory"), treeWidget); treewidget-> setContextMenuPolicy (Qt :: ActionsContextMenu); treeWidget-> addAction (pOpenFile); connect (pOpenFile, SIGNAL (itemClicked (QTreeWidgetItem *, int)), esto, SLOT (opennMusic (QTreeWidgetItem *, int))); Como puede ver, es importante que podamos extraer un Elemento QTreeWidget * para reproducir el archivo. y la conexión que ponemos no funciona. Espero que nos puedas ayudar de nuevo y gracias de nuevo por todos !! – magnus