Seite 1 von 1
Wertebereiche vergrößern
Verfasst: 30. Juli 2010 09:55
von michai
Hallo zusammen!
Ich habe gerade ein kleines Problem und weiß keine Lösung.
Ich benutze diverse Spinboxen, die Variableninhalte repräsentieren. Natürlich soll der Wertebereich der Spinbox auch den der Variablen wiederspiegeln. Jetzt habe ich aber festgestellt, dass selbst eine DoubleSpinBox nur von -(2^32)/2 bis (2^32)/2-1, also signed 32 Bit geht. Jetzt kann es aber theoretisch vorkommen, dass die Variablen auch U32 oder gar [SU]64 sind. Wie kann ich das denn darstellen?
(Qt 4.6, Windows XP 32Bit)
michai
Verfasst: 30. Juli 2010 14:13
von Christian81
Einfach einen kleineren Bereich in der QSpinbox nehmen und dann selbst rechnen. 2 Millarden Spinnbox-Schrittchen machen nun wirklich keinen Sinn.
Verfasst: 30. Juli 2010 14:21
von michai
Christian81 hat geschrieben:Einfach einen kleineren Bereich in der QSpinbox nehmen und dann selbst rechnen. 2 Millarden Spinnbox-Schrittchen machen nun wirklich keinen Sinn.
Mir geht es nicht um die Schrittweite. Zumal ich ja vielleicht auch 2 Milliarden per Tastatur eingeben und dann +/- ein paar Schritte nachjustieren möchte.
Was ich meine ist der darstellbare Bereich bzw. die Werte, die ich per setMinimum() und setMaximum() festlegen kann.
Verfasst: 30. Juli 2010 15:31
von upsala
Nachdem hier 2^40 kein Problem sind, frag ich mich wie du auf diese Grenze kommst.
Verfasst: 2. August 2010 07:29
von michai
upsala hat geschrieben:Nachdem hier 2^40 kein Problem sind, frag ich mich wie du auf diese Grenze kommst.
Wieso 2^40?
Folgendermaßen: Ich habe Code geschrieben, um z.B. das Maximum einer QSpinbox per setMaximum()-Methode in Abhängigkeit des Datentypes zu setzen (per switch... case). Also für U8 -> (2^8 )-1. Für S16 -> (2^16)/2-1. Usw.
Bis S32 ist auch noch alles gut, aber die Werte von U32, S64 und U64 waren nach (!) meinem setzen alle identisch mit denen vom S32. Und es ist kein Programmierfehler.
Die 64-Bitter sind eigentlich fast egal. Da kann ich auch drauf verzichten. Aber einen unsigned 32 würde ich schon gern korrekt darstellen.
Verfasst: 2. August 2010 07:33
von Christian81
Sorry, ich war irgendwie blind am Freitag...

Da hilft wohl nur ableiten von QAbstractspinbox und selbst machen.
Verfasst: 2. August 2010 09:11
von upsala
Du hattest geschrieben, daß der Wertebereich nur bis ca. 2^32 geht, und deswegen habe ich mit einem höheren Wert getestet: 2^40.
Verfasst: 2. August 2010 09:42
von solarix
double hat doch eine Mantisse von 52 oder?
Also:
Code: Alles auswählen
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
QDoubleSpinBox b;
b.setMinimum(0);
b.setMaximum(4503599627370495.0); // 2^52 - 1
b.show();
return app.exec();
}
Zugegeben:im Property-Editor meines Designers (auf diesem System Qt 4.5.3) kann ich allerdings das Maximum nicht über 2^31 - 1 setzen. Im Code wie oben geht's aber..
hth..
Verfasst: 2. August 2010 10:13
von michai
mmm... *kopfkratz*
Jetzt fragt mich nicht warum, aber für U32 geht's tatsächlich mit der DoubleSpinbox. Hatte das eigentlich ausprobiert...
Vielleicht ist der Code übers Wochenende gereift. Wie ein guter Käse...
Danke euch trotzdem!