2009-11-23 53 views
2

我有问题过滤"mousePressEvent"installEventFilter过滤mousePressEvent与installEventFilter

MyTestxEdit是持有QTextEdit 我想要的QTextEdit所有事件将被MyTestxEdit 来处理我已经使用了installEventFilter 这一招一个widget适用于keyPressEvent等事件,但不处理mousePressEvent 我做错了什么?

import sys 
from PyQt4.QtGui import QApplication, QErrorMessage 
from KdeQt.KQApplication import KQApplication 
from KdeQt.KQMainWindow import KQMainWindow 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
import thread 

class MyTestxEdit1(QTextEdit): 
    def __init__(self,parent): 
     QTextEdit.__init__(self) 
     self.setMouseTracking(True) 

class MyTestxEdit(QWidget): 
    def __init__(self): 
     QWidget.__init__(self) 
     self.__qTextEdit=MyTestxEdit1(self) 
     self.__qHBoxLayout=QHBoxLayout() 
     self.setLayout(self.__qHBoxLayout) 
     self.__qHBoxLayout.addWidget(self.__qTextEdit)   
     self.__qTextEdit.installEventFilter(self) 


    def eventFilter(self,target,event): 
     print "eventFilter "+str(event.type()) 
     if(event.type()==QEvent.MouseButtonPress): 
      print "Mouse was presssed "+str(event.type()) 
      self.mousePressEvent(event) 
      return True 
     return False     


if __name__ == '__main__': 
    app = KQApplication(sys.argv,[]) 
    mainWindow = KQMainWindow()#loc, splash, pluginFile, noopen, restartArgs) 
    s = QSize(800, 600) 
    mainWindow.resize(s)  
    testxEdit=MyTestxEdit() 
    mainWindow.setCentralWidget(testxEdit) 

    mainWindow.show() 
    res = app.exec_() 
    sys.exit(res)  
+0

嗨,你的问题帮了我很多。我可以问你'eventFilter'中的'self.mousePressEvent(event)'是什么吗?我已经尝试了类似的例子,但我无法分辨在评论该行时是否有区别。 – Aleksandar 2014-01-17 09:44:10

回答

5

尝试在QTextEdit's视代替QTextEdit本身安装过滤器...

我不知道蟒蛇,但喜欢的事:

self.__qTextEdit.viewport().installEventFilter(self) 

我希望它能帮助!

你应该这样做:

MyClassFrm::MyClassFrm() 
{ 
    ... 
    // Get your TextEdit from the UI here , or create your TextEdit here.... 
    // Install the filter 
    pMyTextEdit->viewport()->installEventFilter(this); 
    ... 
} 

... 

bool MyClassFrm::eventFilter(QObject* pObject, QEvent* pEvent) 
{ 
    if (pEvent->type() == QEvent::MousePressEvent) 
    { 
     qDebug() << "Mouse pressed !!"; 
     // standard event processing 
     return QObject::eventFilter(pObject, pEvent); 
    } 
} 

你应该能够使它工作,我只是在我的应用程序进行测试,它的工作原理...我敢肯定,你靠近!

+0

10'xs 它确实做出改变 – jojo 2009-11-23 20:10:33

+0

10'xs 这是我的工作已经开始得到的QEvent ::涂料每秒钟
它阻止我注意到,在QEvent的:: MousePressEvent被抓获以及 10' xs mate – jojo 2009-11-23 20:16:49

+0

邪恶!不错的工作 !铜 – 2009-11-23 20:29:09