Я работаю над унифицированным проектом, и наша цель - создать программу, которая сканирует все файлы img / video / movie в выбранном каталоге, сохраняет их в базе данных и затем организовывает их шо (используя QTreeWidgetItem). Программа позволяет делать такие вещи, как чтение файлов, их открытие и так далее. Теперь проблема в том, что я хотел бы щелкнуть правой кнопкой мыши по одному из файлов и открыть меню со многими параметрами, такими как Открыть каталог, удалить файл ...
Я просто не знаю, как сделать это меню правой кнопкой мыши, я новичок в QT, я пытался сделать это:
connect(treeWidget, SIGNAL(itemClicked(QTreeWidgetItem *, int)), this, SLOT(openMenu(QTreeWidgetItem *, int)));
Я попытался переопределить метод itemClicked, но не могу найти, как узнать, щелкнул ли он правой кнопкой мыши, и я думаю, что, возможно, я попробую его неправильно.
Я вдохновился этим:
connect(treeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(opennMusic(QTreeWidgetItem *, int)));
, который выполняет музыкальный файл при двойном щелчке.
Если вам нужно больше частей кода, просто дайте мне знать:).
Редактировать после последнего комментария Энди, чтобы показать новый код:
#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);
}
Даже если я удалю QTreeWidget * treeWidget = new QTreeWidget (); Если это не работает, я вижу меню, когда я щелкаю правой кнопкой мыши, но когда я нажимаю кнопку PLAY, ничего не происходит.