我正在做一个 uni 项目,我们的目标是制作一个程序,它可以扫描选定目录中的所有 img/video/movie 文件,将它们存储在数据库中,然后以有组织的方式(使用 QTreeWidgetItem)将它们 shozs。程序允许你做一些事情,比如读取文件,打开它们等等。现在,问题是我想右键单击其中一个文件并弹出一个菜单,其中包含许多选项,例如打开目录、删除文件...
我只是不知道如何制作那个右键菜单,我对 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(); 行它不起作用,我右键单击时看到菜单,但是当我单击播放时,没有任何反应。