Rect in ein QLabel malen... PROBLEM!

Alles rund um die Programmierung mit Qt
Antworten
Davidave
Beiträge: 33
Registriert: 26. Februar 2005 17:26

Rect in ein QLabel malen... PROBLEM!

Beitrag 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
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
Davidave
Beiträge: 33
Registriert: 26. Februar 2005 17:26

Also

Beitrag 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.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
Davidave
Beiträge: 33
Registriert: 26. Februar 2005 17:26

Vielen Dank...

Beitrag von Davidave »

Dann wäre dieses Problem wohl auch gelöst :)
Gruß.
Antworten