Pracuję nad projektem uni, a naszym celem jest stworzenie programu, który skanuje wszystkie pliki img/wideo/filmów w wybranym katalogu, przechowuje je w bazie danych, a następnie przesuwa je w zorganizowany sposób (przy użyciu QTreeWidgetItem). Program pozwala na robienie takich rzeczy, jak czytanie plików, otwieranie ich i tak dalej. Problem polega na tym, że chciałbym kliknąć prawym przyciskiem myszy jeden z plików i wyświetlić menu z wieloma opcjami, takimi jak Otwórz katalog, usuń plik ...Chcę zaimplementować menu prawego przycisku myszy na QTWidgetItems
Po prostu nie wiem, jak zrobić menu z prawym przyciskiem myszy, Jestem trochę nowych do QT, próbowałem czyniąc to:
connect(treeWidget, SIGNAL(itemClicked(QTreeWidgetItem *, int)), this, SLOT(openMenu(QTreeWidgetItem *, int)));
próbowałem redifining metodę itemClicked ale nie wydaje się znaleźć sposób, aby wiedzieć, czy jest to prawy przycisk myszy i myślę, że mogę próbować go z zła droga.
I inspirowane z tego:
connect(treeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(opennMusic(QTreeWidgetItem *, int)));
który wykonuje plik muzyczny na podwójnym kliknięciem.
Jeśli potrzebujesz więcej części kodu, daj mi znać :).
Edit po ostatnim komentarzu Andy, aby pokazać nowy kod:
#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);
}
Nawet jeśli usunąć QTreeWidget * treeWidget = new QTreeWidget(); linia nie będzie działać, widzę menu po kliknięciu prawym przyciskiem myszy, ale kiedy klikam PLAY, nic się nie dzieje.
Witam! Dziękuję za Twoją odpowiedź! I gdzie powinienem zdefiniować pOpenFile? Przypuszczam, że będę musiał umieścić w nim ten sam kod, który mam w opennMusic (QTreeWidgetItem *, int) (z wyjątkiem tego, że nie mam parametrów: /) Mimo że w większości przypadków potrzebuję tylko otworzyć menu, gdzie Mogę kliknąć na Open Target Directory, używając ścieżki zapisanej w bazie danych, niestety, o ile się nie mylę, QT pozwala tylko przeglądać i wybierać pliki z katalogów, ale ich nie otwiera: /. – magnus
Erm, proponuję utworzyć metodę openFile, która skanuje drzewo, szukając SelectedItem. Następnie, w zależności od wybranych elementów, możesz uzyskać na pewno ich "ścieżkę" ... Tak więc, utworzyłbym OpenFile w twoim głównym oknie, (przypuszczam, że to rodzic twojego treewidget) ... Kiedy akcja zostanie wywołana (kliknij prawym przyciskiem myszy menu, skrót lub cokolwiek), możesz skanować wybrane elementy i wykonać odpowiednie zachowanie ... Po wybraniu elementów, może ci to pomóc (prawdopodobnie używam QDirModel): QString QDirModel :: filePath (const QModelIndex & index) const –
ok menu z prawym przyciskiem myszy, używając kodu, który mi dałeś. Wygląda jak ten bankomat: treeWidget = new QTreeWidget(); QAction * pOpenFile = new QAction (tr ("Open repertory"), treeWidget); treewidget-> setContextMenuPolicy (Qt :: ActionsContextMenu); treeWidget-> addAction (pOpenFile); connect (pOpenFile, SIGNAL (itemClicked (QTreeWidgetItem *, int)), to, SLOT (opennMusic (QTreeWidgetItem *, int))); Jak widać, ważne jest, że możemy wyodrębnić element QTreeWidget * w celu odtworzenia pliku. a połączenie, które umieściliśmy, nie działa. Mam nadzieję, że pomożecie nam jeszcze raz i jeszcze raz dziękujemy! – magnus