Automatisches Positionieren

Alles rund um die Programmierung mit Qt
Antworten
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Automatisches Positionieren

Beitrag von Nvidia »

Hallo,
gibst bei QT schon sowas, oder wie würde man das am besten machen.
Wenn man möchte, dass der Benutzer Dinge rumziehen kann, und die aber nur auf ganz bestimmte positionen können, also wenn er sie in die nähe zieht und los lässt, positioniert er sich auf der nächstmöglich position?
Würde man das so machen, da es nicht viele sind.
Man legt die Punkte fest und mein Mausrealse, wird zu allen Positionen die Entfernunng berechnet, und das dann ausgewählt was am nächesten ist.
nvidia
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag von Troll.Soft »

Das QDropEvent enthält

Code: Alles auswählen

const QPoint& pos () const
vermutlich suchst Du diese Funktion.
tschüß
Troll.Soft
sanni
Beiträge: 39
Registriert: 27. Mai 2010 11:53

Beitrag von sanni »

Wenn du die Position z.B. alle 20 Pixel einrasten lasen willst, musst du nur den x,y-Wert deiner Mausposition abfragen und und beide durch 20.0 teilen (Ergebniswert muss jetzt ein double-Wert sein) und dann mit 20 multiplizieren (der Ergebniswert muss jetzt in einen integer-Wert konvertiert werden).
So bekommst du eine gerasterte Position . . .
Himbeer-Toni
Beiträge: 11
Registriert: 7. Juni 2010 07:49

Beitrag von Himbeer-Toni »

sanni hat geschrieben:...beide durch 20.0 teilen (Ergebniswert muss jetzt ein double-Wert sein) und dann mit 20 multiplizieren (der Ergebniswert muss jetzt in einen integer-Wert konvertiert werden).
So bekommst du eine gerasterte Position . . .
Andersrum. Erst teilen und nach Int konvertieren (Nachkommastellen abschneiden), dann mit 20 Multiplizieren ;)
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Ist doch alles falsch :P Ein Abschneiden der Nachkommastellen rundet IMMER AB. Das bringt einem nix, wenn man den nächsten Punnkt sucht - der kann ja auch höher liegen. Normales Runden ist angesagt.
Z.B. über ein Modulo.
Oder mit eurer Teilmethode (leicht modifiziert):

Code: Alles auswählen

double dx = 499 / 20.0;   // 24.95
dx += 0.5;
int result = static_cast<int>(dx) * 20;  // 500
So kommt auch 500 raus und nicht 480 ;)
500 ist doch näher an 499, oder?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Das sind mathematische Grundlagen und bräuchten hier eigentlich gar nicht diskutiert werden...
N&#164;X
Beiträge: 77
Registriert: 21. September 2009 12:24

Beitrag von N&#164;X »

Mal back to topic: Qt hat meines Wissens nach nichts dergleichen, also wirst du es wohl so machen müssen, dass du den Nearest Neighbour suchst.
Und solange es unter 100 möglichen Punkten bleibt sollte einfaches vergleichen aller Abstände nicht unbedingt ins Gewicht fallen.
mfg N¤X
TSS
Beiträge: 73
Registriert: 24. November 2009 15:40
Kontaktdaten:

Beitrag von TSS »

Sowas macht doch z.B. das Drag&Drop Puzzle Beispiel. Da kannst du dir ja mal anschauen, wie es realisiert wurde.
Antworten