Seite 1 von 1

Rect in ein QLabel malen... PROBLEM!

Verfasst: 14. März 2005 11:03
von Davidave
Hallo zusammen.
Ich habe ein Problem beim Malen eines Rechtecks in ein QLabel.
Ich habe eine Struktur von Widgets erzeugt:
Zuerst umfassend ein Widget, in diesem oben eine MenuBar, dann ein QSplitter, der das MainWidget in 2 Teile aufteilt.
Links ist ein ScrollView mit dem betreffenden QLabel als Inhalt.
Rechts ist eine QVBox mit Buttons etc.
Sieht dann in etwa so aus:

__________________________________________________
____________________Menu_________________________
ScrollView with label | another Box
|
|
--------------------------------------------------------------

Das Label hat ein gewisses Hintergrundbild und ich möchte nun dass wenn der Nutzer mit der Maus auf das Label klickt, an genau dieser Stelle ein Rechteck gemalt wird.
Bei mir sieht das folgendermaßen aus (Code etwas minimiert):

void Pic::mousePressEvent(QMouseEvent* event){
if(label->hasMouse()){
lastPoint=event->pos();
QPainter painter;

painter.begin(label);
painter.setPen(col);
painter.drawRect(lastPoint.x(), lastPoint.y(),10,10);
painter.end();
}
}

Das Problem ist nur, dass die Rects nicht an der MousePosition gemalt werden, sondern um eine gewisse Translation verschoben.
Sobald ich die ScrollBars schiebe verändert sich diese Translation auch noch.

Alles was ich will ist, dass genau an dem Punkt auf dem Label gemalt wird, den ich anklicke...
Weiss wer wie?

Ps: Ich weiss net ob es richtig ist, aber ich habe das Problem beim verschieben der ScrollBars in den Griff bekommen mit:
QPoint LastPoint2 = scrollBar->viewportToContents(lastPoint);
Und dann mit diesem Punkt malen.
(Also irgendwas mit dem Punkt gemacht... Keine Ahnung )

:lol:

Vielen Dank für eure Zeit

Verfasst: 14. März 2005 12:10
von FlorianBecker
Hast du vielleicht ein Bild dazu? ist die Entfernung immer genau gleich verschoben?

Ich habe mit malen nicht so wirklich viel Ahnung, dass dauert mir immer zu lange, aber ich habe da mal irgendwie mitbekommen, dass man malen relativ einfach über eine protected Funktion machen kann, evtl. wäre das ja auch was. Damit kannst dann einfach: wenn maus gedrückt, dann paint.

Also

Verfasst: 14. März 2005 15:14
von Davidave
Die Entfernung war immer gleich verschoben.
War, weil es mit folgender Methodik läuft:
a)
QPoint lastPoint2 = QCursor::pos();
QPoint lastPoint3 = label->mapFromGlobal(lastPoint2);

b)
lastPoint2=event->globalPos();
QPoint lastPoint3 = label->mapFromGlobal(lastPoint2);

So klappt es nun die exakte Position zu ermitteln.
Meinst du es ist ok, oder nur provisorisch gefixed?

Ein Bild habe ich jetzt leider net, hoffe es geht auch so.
Gruß, Davidave.

Verfasst: 15. März 2005 00:26
von FlorianBecker
Also ohne mich damit konkreter zu befassen, würde ich behaupten, es geht mit beiden Lösungen, bei dem einen musst halt dann nur ein wenig verschieben. Also ein "Wahrer Bug" bestand wohl nie.

Vielen Dank...

Verfasst: 16. März 2005 11:01
von Davidave
Dann wäre dieses Problem wohl auch gelöst :)
Gruß.