customContextMenuRequested(const QPoint &pos) 我在Qt树控件中用这个信号,怎么会报No such signal 呢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了customContextMenuRequested(const QPoint &pos) 我在Qt树控件中用这个信号,怎么会报No such signal 呢相关的知识,希望对你有一定的参考价值。

代码如下:

.h文件:
class CMaterialTree :
public QTreeWidget

Q_OBJECT
.......................
signals:
void customContextMenuRequested(const QPoint & pos);
private slots:
void createContextMenu(const QPoint & pos);
.......................


.cpp文件:
CMaterialTree::CMaterialTree(QWidget * parent)
:QTreeWidget(parent)

setContextMenuPolicy(Qt::CustomContextMenu);
.........................
connect(this,SIGNAL(customContextMenuRequested(const QPoint &pos)),
this,SLOT(createContextMenu(const QPoint &pos)));


void CMaterialTree::createContextMenu(const QPoint &pos)

rightMenu = new QMenu;
actNew = new QAction("new",this);
rightMenu->addAction(actNew);
actCpy = new QAction("copy",this);
rightMenu->addAction(actCpy);
actDel = new QAction("delete",this);
rightMenu->addAction(actDel);
......

rightMenu->exec(pos);

没说清楚,就是右键点击树中的条目弹出菜单,但是这样写右键点击弹不出来,信号没有发送出来不知道为何?

参考技术A customContextMenuRequested(const QPoint & pos);是树自带的信号

不需要定义,直接继承使用追问

嗯嗯,发现了,可是去掉之后还是不行,我现在换成了contextMenuEvent解决了问题,但没明白那个信号怎么就检测不到,我之前用过一次是在程序主窗口中检测没问题,现在放到这个类中就不行了。

追答

connect的时候不需要写参数名,只要写类型。。

本回答被提问者和网友采纳
参考技术B connect(this,SIGNAL(customContextMenuRequested(const QPoint &pos)),
this,SLOT(createContextMenu(const QPoint &pos)));
写成这样就可以了,信号和槽只需写类型就可以了,不需要写形参
connect(this,SIGNAL(customContextMenuRequested(const QPoint &)),
this,SLOT(createContextMenu(const QPoint &)));

如何将 QTableView 连接到右键菜单

【中文标题】如何将 QTableView 连接到右键菜单【英文标题】:How to connect QTableView to a right-click menu 【发布时间】:2017-05-10 17:03:46 【问题描述】:

对于较旧的语法,我们必须使用 QtCore.SIGNAL("customContextMenuRequested(QPoint)" 这个东西。

现在随着 Qt5 的临近,旧的 QtCore.SIGNAL 语法不再酷了,因为它变得绝对了。

如何修改下面贴出的PyQt4工作代码,使其与PyQt5兼容(只关心连接右键菜单)?

class TableView(QtGui.QTableView):
    def __init__(self, parent):
        QtGui.QTableView.__init__(self, parent)
        self.rcMenu=QtGui.QMenu(self)
        self.rcMenu.addAction('My Action')
        self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.connect(self, QtCore.SIGNAL("customContextMenuRequested(QPoint)" ), self.onRightClick)

def onRightClick(self, QPos=None):       
    parent=self.sender()
    pPos=parent.mapToGlobal(QtCore.QPoint(5, 20))
    mPos=pPos+QPos

    self.rcMenu.move(mPos)
    self.rcMenu.show()

【问题讨论】:

【参考方案1】:

替换:

self.connect(self, QtCore.SIGNAL("customContextMenuRequested(QPoint)" ), self.onRightClick)

与:

self.customContextMenuRequested.connect(self.onRightClick)

class TableView(QtGui.QTableView):
    def __init__(self, parent):
        QtGui.QTableView.__init__(self, parent)
        self.rcMenu=QtGui.QMenu(self)
        self.rcMenu.addAction('My Action')
        self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.customContextMenuRequested.connect(self.onRightClick)

def onRightClick(self, QPos=None):       
    parent=self.sender()
    pPos=parent.mapToGlobal(QtCore.QPoint(5, 20))
    mPos=pPos+QPos

    self.rcMenu.move(mPos)
    self.rcMenu.show()

【讨论】:

以上是关于customContextMenuRequested(const QPoint &pos) 我在Qt树控件中用这个信号,怎么会报No such signal 呢的主要内容,如果未能解决你的问题,请参考以下文章

QTableView中左键和右键的区别

重新映射 qwidget 上的上下文菜单调用

pyqt5的QListWidget中设置右键菜单

Qt在QTableWidgetView等表格中添加右击菜单

在 Qt 中为 QTableView 创建弹出菜单

在TreeWidget中增加右键菜单功能 以及TreeWidget的基本用法