Seite 1 von 1

Automatisches Positionieren

Verfasst: 16. Juni 2010 22:00
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

Verfasst: 16. Juni 2010 22:19
von Troll.Soft
Das QDropEvent enthält

Code: Alles auswählen

const QPoint& pos () const
vermutlich suchst Du diese Funktion.
tschüß
Troll.Soft

Verfasst: 16. Juni 2010 22:57
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 . . .

Verfasst: 17. Juni 2010 07:56
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 ;)

Verfasst: 17. Juni 2010 08:34
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?

Verfasst: 17. Juni 2010 09:08
von upsala
Das sind mathematische Grundlagen und bräuchten hier eigentlich gar nicht diskutiert werden...

Verfasst: 17. Juni 2010 14:39
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.

Verfasst: 17. Juni 2010 21:33
von TSS
Sowas macht doch z.B. das Drag&Drop Puzzle Beispiel. Da kannst du dir ja mal anschauen, wie es realisiert wurde.