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
Automatisches Positionieren
-
- Beiträge: 190
- Registriert: 18. Juni 2008 09:52
- Wohnort: Hamburg
Das QDropEvent enthält vermutlich suchst Du diese Funktion.
tschüß
Troll.Soft
Code: Alles auswählen
const QPoint& pos () const
tschüß
Troll.Soft
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 . . .
So bekommst du eine gerasterte Position . . .
-
- Beiträge: 11
- Registriert: 7. Juni 2010 07:49
Andersrum. Erst teilen und nach Int konvertieren (Nachkommastellen abschneiden), dann mit 20 Multiplizierensanni 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 . . .
Ist doch alles falsch 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):
So kommt auch 500 raus und nicht 480
500 ist doch näher an 499, oder?
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
500 ist doch näher an 499, oder?