Wie berechnet man am besten die qHash
Wert einer QRect
? Ich muss verwenden QRect
(und vielleicht QRectF
) als den Schlüssel von QCache
. Im Moment verwende ich etwas wie dieses:
inline uint qHash(const QRect & r)
{
return qHash(QByteArray::fromRawData((const char*)&r, sizeof(r)));
}
Es scheint zu funktionieren, aber ich mag es nicht in einige rohe Bytes umzuwandeln, und da QRect keine einfache Struktur ist, könnte dies in zukünftigen Versionen von Qt eher früher als später kaputt gehen.
NEBENBEI BEMERKT. Ich speichere die Hash-Werte nicht, also muss es nicht persistent oder plattformübergreifend sein. Aber es muss zuverlässig und schnell sein.
Merci.
1 Stimmen
Denken Sie zweimal nach, bevor Sie QRectF als QCache-Schlüssel verwenden... denken Sie daran, dass, da QRectF Fließkommawerte enthält, Fließkommafehler auftreten können, und wenn dies der Fall ist, werden sie die von qHash() zurückgegebenen Werte beeinflussen.
0 Stimmen
@Jeremy: Danke für die Warnung. Ich habe das Problem mit den Fließkommazahlen vergessen. Ich werde die Zwischenspeicherung auf der skalierten Pixmap mit Integer-Geometrie durchführen.
0 Stimmen
@Stephen Seien Sie aber auch nicht zu paranoid wegen Rundungsfehlern. Oft müssen zwei leicht unterschiedliche Zahlen (aufgrund von Rundungen) semantisch nicht als dieselbe Zahl behandelt werden.