Qt的listWidget如何添加右键菜单

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt的listWidget如何添加右键菜单相关的知识,希望对你有一定的参考价值。

如题 我怎么在listwidget的item上面点击鼠标右键就会出现我自定义的菜单,在别的地方点击不出现菜单?求大神指点,不要回答自己百度,因为我试过了,没成功,谢谢。

参考技术A 不解释,自己看。
// myWidget is any QWidget-derived class
myWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(myWidget, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(ShowContextMenu(const QPoint&)));

void MyClass::ShowContextMenu(const QPoint& pos) // this is a slot

    // for most widgets
    QPoint globalPos = myWidget->mapToGlobal(pos);
    // for QAbstractScrollArea and derived classes you would use:    
    // QPoint globalPos = myWidget->viewport()->mapToGlobal(pos);    
    
    QMenu myMenu;    
    myMenu.addAction("Menu Item 1");    
    // ...    
    
    QAction* selectedItem = myMenu.exec(globalPos);    
    if (selectedItem)    
            
        // something was chosen, do stuff    
    
    else    
            
        // nothing was chosen    
    

本回答被提问者采纳

pyqt5的QListWidget中设置右键菜单

两种思路:
一. 重写event事件方法。
容易出现冲突事件...
二. 利用Widget的添加菜单方式
listWidget.setContextMenuPolicy(3) 设置菜单
listWidget.customContextMenuRequested[QtCore.QPoint].connect() 绑定方法
此时的右键菜单是整个列表任意地方都会弹出。
传递的信号参数是鼠标点击的位置 QPoint。

绑定的函数往往需要其他参数,有两种方式:
1> 匿名函数
connect(lambda: function(args1,args2))

2> 通过functools工具中的partial 函数
connect(partial(function,arg1,arg2))

推荐第二种,因为会附带默认参数一起传递。
*
——
——
通过上面的Qpoint 获取列表中的 选定的选项 item :
item = listWidget.itemAt(x,y) ,根据point的坐标
移除 列表选项中的item :
listwidget.removeItemWidget(listwidget.takeItem(listwidget.row(item)))

以上是关于Qt的listWidget如何添加右键菜单的主要内容,如果未能解决你的问题,请参考以下文章

我的Qt学习笔记 4 如何在 QWidget 窗口上弹出右键菜单

我的Qt学习笔记 4 如何在 QWidget 窗口上弹出右键菜单

pyqt 按钮怎么添加右键菜单

Qt添加右键菜单

QT5 QTreeView添加右键菜单

如何给tablewidget整行条目加右键菜单