2009-11-23 2 views
2

와 나는 데 installEventFilter필터링 mousePressEvent installEventFilter

MyTestxEdit 내가 QTextEdit의 모든 이벤트 내가 installEventFilter 이 트릭을 사용했다 MyTestxEdit 에 의해 처리됩니다 원하는 QTextEdit 를 보유하고 위젯입니다 "mousePressEvent"로 필터링 문제 keyPressEvent과 같은 이벤트는 잘 처리되지만 mousePressEvent 을 처리하지 못합니다. 무엇이 잘못 되었나요? 대신 QTextEdit 자체의 QTextEdit's 뷰포트에 필터를 설치하는

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

답변

5

시도 ...

내가 좋아하는 파이썬하지만 뭔가 모르는 : 나는 그것이 도움이되기를 바랍니다

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 그것은 그것은 QEvent :: MousePressEvent이 10 '뿐만 아니라 잡힌 것을 알아 차리지에서 저를 방지 매 초
을 :: 내가 QEvent을 얻기 시작했습니다 작업 페인트되는 변화 – jojo

+0

10'xs 을했다 xs 메이트 – jojo

+0

사악한! 좋은 작업 ! 삼 –