我是Python和Qt的新手,我有以下问题:
我已经重写了class mywin(QMainWindow):
的事件处理程序,所以当我点击它时,应该执行一个命令。但是,当命令返回错误时,我想使用QErrorMessage
显示错误消息。然后,当我点击错误消息的确定按钮时,注册了另一个点击事件,命令重新执行,错误并显示新的错误消息,所以我不能退出错误消息(每次我关闭,一个另一个重新开放。)
def eventFilter(self, source, event):
if event.type() == QEvent.MouseButtonPress:
if isinstance(source, QWidget):
pos=event.pos()
cursor=self.txtEditor.cursorForPosition(pos)
cursor.select(QTextCursor.WordUnderCursor)
txtClicked=cursor.selectedText()
self.testCommand(str(txtClicked))
return QMainWindow.eventFilter(self, source, event)
def testCommand(self, textClicked=None):
#Command executing and error finding
if error:
errorMessage=QErrorMessage(self)
errorMessage.showMessage(a)
这是eventFilter的注册表
if __name__ == '__main__':
app = QApplication(sys.argv)
print "OS Name:"+os.name
main = mywin()
main.show()
app.installEventFilter(main)
sys.exit(app.exec_())
如果我记录
<PyQT4.QtGui.QWidget object at 0x000000000028B30D0>
<PyQT4.QtGui.QTextEdit object at 0x000000000028B3268>
doc of installEventFilter:http://harmattan-dev.nokia.com/docs/platform-api-reference/xml/daily-docs/libqt4/qobject.html#installEventFilter
答案 0 :(得分:2)
首先,您应该显示注册事件过滤器的代码 其次,您要验证这是您要过滤的事件并不是那么好。您应该验证特定小部件而不是类型,因此它应该类似于:
def eventFilter(self, source, event):
if event.type() == QEvent.MouseButtonPress:
if source == self.txtEditor :
pos=event.pos()
cursor=self.txtEditor.cursorForPosition(pos)
cursor.select(QTextCursor.WordUnderCursor)
txtClicked=cursor.selectedText()
self.testCommand(str(txtClicked))
return QMainWindow.eventFilter(self, source, event)
<小时/> 修改强>
答案 1 :(得分:1)
来自source
和mywin
对象的点击事件不应该QErrorMessage
参数不同吗?如果是,您可以检查它并阻止重新执行。