Hallo alle.
Ich schreibe ein Programm in C++ und benutze dabei u.a. QT(glaube QT3).
Das Hauptfenster ist ein QMainWindow mit QScrollView darin, in dem wiederum ein QLabel ist.
Dieses Label enthält eine QPixmap auf der ich an der Stelle, wo mit der Maus geklickt wird, ein kleines Rechteck male.
Soweit klappt alles super, aber:
Benutze ich die Scrollbars um verschiedene Bildbereich zu erreichen, kann es vorkommen, dass das Label keine MausKlickSignale mehr annimmt.
Dies geschieht soweit ich es beobachten konnte v.a., wenn ich ganz an die Ränder scrolle, also die Scrollbars ganz nach links oder rechts, bzw oben oder unten gezogen wurden.
Klicke ich dann, passiert garnichts, das Signal scheint nicht anzukommen...
Es werden anschließend erst wieder Mauskommandos angenommen, wenn ich die Scollbars ein Stück bewege.
Ich weiss, es ist keine sonderlich präziese Problembeschreibung, aber ich kann leider keine Regelmäßigkeiten sehen, wann so ein "Scoll-Lock" passiert.
Vielleicht kennt ja jemand von euch das Problem und kann mir helfen.
Gruß und Dank!
Probleme mit QScrollView und MausKlicks
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Ich habe das Problem gefunden, aber weiss nicht recht, wie es zustande kommt...
Hier sind nun Codeausschnitte:
a) aus dem MainWindow:
//PicTab ist auf der linken Seite eines QSplitters
PicTab = new QTabWidget(splitter);
ScrollView = new QScrollView(PicTab,"0");
PicLabel = new Pic_Label(ScrollView,"0");
ScrollView->addChild(PicLabel);
b) aus der Klasse PicLabel (erbt von QLabel):
void Pic_Label::mousePressEvent(QMouseEvent* event){
if(mode==1 && this->hasMouse() && event->button()==LeftButton){ ...}
}
}
Das Problem ist, dass ab und an die ifAnweisung nicht ausgefuehrt wird, da this->hasMouse() false ist.
Ich habe diese Komponenten aus dem if entfernt. Jetzt scheint es zu gehen.
Ich habe aber keine Ahnung, warum das PicLabel hasMouse=false hat. Habe doch nur gescrolled und dann wieder mitten ins Label geklickt.
Habt ihr noch ne Anmerkung?
Gruesse!
Hier sind nun Codeausschnitte:
a) aus dem MainWindow:
//PicTab ist auf der linken Seite eines QSplitters
PicTab = new QTabWidget(splitter);
ScrollView = new QScrollView(PicTab,"0");
PicLabel = new Pic_Label(ScrollView,"0");
ScrollView->addChild(PicLabel);
b) aus der Klasse PicLabel (erbt von QLabel):
void Pic_Label::mousePressEvent(QMouseEvent* event){
if(mode==1 && this->hasMouse() && event->button()==LeftButton){ ...}
}
}
Das Problem ist, dass ab und an die ifAnweisung nicht ausgefuehrt wird, da this->hasMouse() false ist.
Ich habe diese Komponenten aus dem if entfernt. Jetzt scheint es zu gehen.
Ich habe aber keine Ahnung, warum das PicLabel hasMouse=false hat. Habe doch nur gescrolled und dann wieder mitten ins Label geklickt.
Habt ihr noch ne Anmerkung?
Gruesse!