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);
没说清楚,就是右键点击树中的条目弹出菜单,但是这样写右键点击弹不出来,信号没有发送出来不知道为何?
不需要定义,直接继承使用追问
嗯嗯,发现了,可是去掉之后还是不行,我现在换成了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 呢的主要内容,如果未能解决你的问题,请参考以下文章