der Tipp für mein bereits angesprochenes Problem war, ein eventFilter() zu verwenden. Aber der tut nicht ganz, wie ich es erwartet habe. Vielleicht habe ich auch etwas nicht richtig verstanden.
Situation: ich habe in meinem Hauptfenster ein QLabel, graphView_scene, für Bildausgaben. Außerdem habe ich mousePressEvent(..) für das Hauptfenster überschrieben mit eigenen Aktionen.
Meine Absicht: Mouseevents sollen so gefiltert werden, dass nur die Klicks im QLabel an mousePressEvent(..) weitergeleitet werden.
Realisierung:
Code: Alles auswählen
im Konstruktor meines Hauptfensters ipcSim:
...
graphView_scene->installEventFilter(this);
...
bool ipcSim::eventFilter(QObject *obj, QEvent *event)
{
if (obj == graphView_scene) {
if (event->type() == QEvent::MouseButtonPress) {
qDebug() << "Mousetaste ";
return false;
}
else
return true;
} else {
// pass the event on to the parent class
return QMainWindow::eventFilter(obj, event);
}
}
vorläufige Version zur Visualisierung, was passiert:
void ipcSim::mousePressEvent(QMouseEvent* event) {
...
if (event->button() == Qt::LeftButton) {
qDebug() << "li(" << event->x() << ", " << event->y() << ")";
else if (event->button() == Qt::RightButton) {
qDebug() << "re(" << event->x() << ", " << event->y() << ")";
...
} linker Bereich: alles mit Bedienelementen voll
mittlerer Bereich: Bildausgabe auf QLabel
rechter Bereich: weitere Bedienelemente, Flächen des Hauptfensters zwischendrin sichtbar
was passiert:
Klicks im linken Bereich: nichts kommt zu mousePressEvent(..) durch --> ok
Klicks im mittleren Bereich: Klicks kommen in mousePressEvent(..) an, z.B. "Mousetaste li(.., ...)" --> ok
Klicks im rechten Bereich: Klicks auf einigen der Bedienelemente kommen nicht durch, auf anderen dagegen schon, und Klicks auf die sichtbaren Flächen des Hauptfensters kommen alle durch, wobei jeweils nur der Teil der Ausgaben aus mousePressEvent(..) ankommt, z.B. "li(.., ...)" --> ??
Weil ich dachte, der Grund dafür, dass im rechten Bereich Klick-Events durchkommen, liegt an der letzten Zeile von eventFilter(..), habe ich diese Zeile gelöscht. Am Verhalten hat sich jedoch überhaupt nichts geändert.
Warum kommen Klicks im rechten Bereich teilweise durch und im linken Bereich überhaupt nicht?