我正在开发一个uni项目,我们的目标是制作一个程序,扫描所选目录上的所有img/video/movie文件,将它们存储在数据库中,然后以有条理的方式(使用QTreeWidgetItem)进行翻译.程序允许你做一些事情,如读取文件,打开它们等等.现在,问题是我想右键单击其中一个文件并弹出一个菜单,其中包含许多选项,如Open Directory,删除文件......
我只是不知道如何制作正确的点击菜单,我是QT的新手,我试过这个:
connect(treeWidget, SIGNAL(itemClicked(QTreeWidgetItem *, int)), this, SLOT(openMenu(QTreeWidgetItem *, int)));
Run Code Online (Sandbox Code Playgroud)
我尝试重新设计itemClicked方法,但似乎无法找到如何知道它是否是一个右键单击,我想我可能会以错误的方式尝试它.
我从中受到启发:
connect(treeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(opennMusic(QTreeWidgetItem *, int)));
Run Code Online (Sandbox Code Playgroud)
它会在双击时执行音乐文件.
如果您需要更多代码部分,请告诉我:).
编辑完andy的最后一条评论以显示新代码:
#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); …
Run Code Online (Sandbox Code Playgroud)