qt - 我想在 QTWidgetItems 上实现右键菜单

标签 qt right-click

我正在开发一个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/

相关文章:

python - 如何在 PySide/PyQt 中终止纯控制台应用程序?

c++ - 无法在 Release 模式下在 Qt 中加载 QSQLCIPHER

c++ - 从函数返回 QString - 线程安全?

windows - 为什么 Qt 让开发人员为每个应用程序包含他们的 dll?

python - 如何在Finder中制作“右键单击选项”? (苹果电脑)

c++ - QDataStream operator << 抽象类的重载

right-click - 右键单击“Git Bash here”不起作用

c# - 如何在右键单击 WPF DataGrid 时访问 DataGridCell

javascript - 在没有 js 和 css 的情况下禁用右键单击

python - wxPython:鼠标右键单击不设置焦点