我正在开发一个uni项目,我们的目标是制作一个程序,扫描选定目录中的所有img/video/movie文件,将它们存储在数据库中,然后以有组织的方式shozs它们(使用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)));
双击即可执行音乐文件。
如果您需要更多代码部分,请告诉我:)。
在 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);
}
即使我删除了 QTreeWidget * treeWidget = new QTreeWidget();行它不起作用,当我右键单击时我看到菜单,但当我单击“播放”时,什么也没有发生。
最佳答案
在QWidget类中,您可以找到一个名为:
的方法void setContextMenuPolicy (Qt::ContextMenuPolicy policy)
使用参数:Qt::ActionsContextMenu(您可以通过代码或在 QtDesigner 中设置它。)
然后你可以像这样创建一个 QMenu :
QTreeWidget* pTreeWidget = new QTreeWidget();
QAction* pOpenFile = new QAction(tr("Open A File"), pContextMenu);
pTreeWidget->setContextMenuPolicy(Qt::ActionsContextMenu);
pTreeWidget->addAction(pTestCard);
使用它很好,因为您可以在其他菜单中重复使用您的操作,例如在主窗口菜单中...
希望对大家有一点帮助!
关于qt - 我想在 QTWidgetItems 上实现右键菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2133701/