2009-11-23 3 views
2

J'ai filtrent le problème le "mousePressEvent" avec installEventFilterFiltrage mousePressEvent avec installEventFilter

MyTestxEdit est un widget qui détient QTextEdit Je veux que tous les événements de QTextEdit seront gérer par MyTestxEdit J'ai utilisé le installEventFilter Cette astuce fonctionne bien pour des événements comme keyPressEvent mais ne gère pas le mousePressEvent qu'est-ce que je fais mal?

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

Bonjour, votre question m'a beaucoup aidé. Puis-je vous demander pour quoi 'self.mousePressEvent (event)' dans votre 'eventFilter'? J'ai essayé un exemple similaire et je ne peux pas dire s'il y a une différence quand je commente cette ligne. – Aleksandar

Répondre

5

Essayez d'installer le filtre sur la fenêtre QTextEdit's au lieu de se QTextEdit ...

Je ne sais pas python, mais quelque chose comme:

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

J'espère que ça aide!

Vous devriez faire quelque chose comme:

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); 
    } 
} 

Vous devriez être en mesure de le faire fonctionner, je viens de tester dans une ma demande, cela fonctionne ... Je suis sûr que vous êtes proche!

+0

10'xs Il a fait faire le changement – jojo

+0

10'xs Il travaille j'ai commencé à obtenir la peinture QEvent :: toutes les secondes qui me
empêcher de remarquer que le QEvent :: mousePressEvent a été capturé et 10' xs mate – jojo

+0

Wicked! Bon travail ! cu –