Qt - mouseReleaseEvent() in von QTableView abgeleiteter Klasse - Problem mit Signalen



  • Hallo,
    ich habe gerade versucht, einem QTableView ein eigenes Signal zuzufügen. Soweit hat es funktioniert, allerdings sind jetzt die vom QTableView geerbten Signale verschwunden.
    Ein wenig Code:

    void MyTableView::mousePressEvent(QMouseEvent * event)
    {	if(event->button() == Qt::MidButton)
    	{	emit middleMouseButtonPressed();
    		event->accept();
    	}
    	event->ignore();
    }
    

    Damit funktionieren nun 2 Dinge nicht mehr:

    connect(MyTableView1 , SIGNAL(clicked(QModelIndex)) , this , SLOT(((eigener_slot2()));
    

    sowie das Editieren per Doppelklick.

    Muss ich beim Ableiten irgendetwas beachten, damit ich diese Signale nicht blockiere?



  • Tjo, das clicked() kann doch QTableView nur senden, wenn er das erkennt dass wo geklickt wurde. Das geht mit mousePressEvent/mouseReleaseEvent.
    Wenn du in deiner eigenen Methode also nie QTableView::mouseReleaseEvent(event); aufrufst kommst du auch nie in den Genuss ein clicked() SIGNAl zu bekommen. Klar? 😉

    void MyTableView::mousePressEvent(QMouseEvent * event)
    {
        if(event->button() == Qt::MidButton)
        {
            emit middleMouseButtonPressed();
        }
        QTableView::mousePressEvent(event);
    }
    

    Das mit dem accept/ignore schenken wir uns lieber, denke ich 😉
    Schau da nochmal nach, ob du das Event wirklich ignorieren willst, wenn mit der mittleren Maustaste geklickt wurde.



  • Du bist mein Held, l'abra d'or :D. Hast mir jetzt schon so manches mal geholfen, danke.

    Ich hatte ja keine Ahnung, WIE ich ein nicht benötigtes Event weiterleite, hatte gerade angefangen, mir einen Event-Filter aufzusetzen. So ist es natürlich deutlich einfacher und schöner.
    Qt ist ziemlich groß, da passiert es mir oft, dass ich den Wald vor Bäumen nicht sehe... 😉


Anmelden zum Antworten