大家好,我对PyQt比较陌生。我正在尝试为Qgis创建一个自定义插件,使用户可以通过使用鼠标单击在画布上绘制多边形来选择某些功能,然后执行所选功能与另一个图层的交叉。我想要做的是,当用户右键单击画布时,多边形选择应该停止。为此,我必须识别左右鼠标信号。我已经制作了一个虚拟函数来测试这个功能:
def mousePressEvent(self):
print "code enters mousePressEvent function"
if event.buttons() == "Qt::LeftButton"
print"Left button pressed"
我按如下方式调用此函数:
QObject.connect(self.clickTool,SIGNAL("canvasClicked(QMouseEvent,Qt::MouseButton)"),self.mousePressEvent)
但我无法调用该功能。我想我在canvasClicked部分做错了什么。对此事的任何帮助将不胜感激。在此先感谢:)
答案 0 :(得分:1)
实现此目的的最佳方法是使用 QgsMapToolEmitPoint 对象。一个例子是:
在你的代码中,创建一个名为emitPoint的变量,并在 run()函数中设置它:
self.emitPoint = QgsMapToolEmitPoint(self.mapCanvas)
QObject.connect(
self.emitPoint,
SIGNAL("canvasClicked(const QgsPoint &, Qt::MouseButton)"),
self.clickedOnMap)
并创建一个函数:
def clickedOnMap(self, pointOnMap, buttonUsed):
if (button==Qt.LeftButton):
....
buttonUsed参数具有枚举Qt :: MenuButtons中的一个值(正如您在链接中看到的那样:http://doc.qt.io/qt-4.8/qt.html#MouseButton-enum)。