Seite 1 von 1

[gelöst] QDoubleSpin Komma+Punktsepariert

Verfasst: 7. April 2011 14:26
von Pixtar
Hallo Leute,

ich habe hier nen kleines Prob. Es geht um die QDoubleSpinBox, welche den Nachkommateil vom Vorkommateil per Komma trennt. Diese Notation möchte ich beibehalten und zusätzlich eine Punktseparierung ermöglichen:

Eingabe1 : 5,223 = 5,223
Eingabe2 : 5.233 = 5,223

QDoubleSpinBox besitzt derzeit noch keine eigenen Methoden um dieses Vorhaben umzusetzen.

Irgendwelche Ideen?

Grüße Pixtar

PS: Habe die Klasse bereits abgeleitet und per valueFromText umgebaut, was auch funktionierte, sofern ich die Klasse in einem leeren Widget hatte. Nachdem ich sie aber in meinem Programm eingebaut hatte, ging die Funktion wiederum nicht.

Verfasst: 7. April 2011 15:11
von Pixtar
Hier mal der Quelltext der funktioniert, wenn die SpinBox alleine ist:

Code: Alles auswählen

#include <QApplication>
#include <QtGui>

class DotCommaDoubleSpinBox : public QDoubleSpinBox{
public:
    DotCommaDoubleSpinBox(QWidget* parent = 0) : QDoubleSpinBox(parent){
    }

protected:
    virtual double valueFromText(const QString &text) const{
        return text.toDouble();
    }
};


int main(int argc, char *argv[]){

    QApplication a(argc, argv);

    DotCommaDoubleSpinBox spinBox;
    spinBox.setRange(-999999, 999999);
    spinBox.setValue(500000);
    spinBox.show();

    return a.exec();

}

Verfasst: 7. April 2011 16:10
von Pixtar
Habe nun mindestens 10 Varianten versucht um diese Klasse in meinem Programm zum laufen zu bekommen.
Habe selbst die Compiler-Flags für den Beispielquelltext von meinem Programm übernommen und es funktioniert immernoch im Beispiel.

Hätte jemand eine Idee, wer oder was die Methoden der Klasse blockiert?

Grüße Mike

PS: Ich habe keine anderen abgeleitete Klassen der Klasse, wo es zu Problemen kommen könnte.

Verfasst: 8. April 2011 09:02
von Pixtar
Problem gelöst mit folgendem Code:

Code: Alles auswählen

class DotCommaDoubleSpinBox : public QDoubleSpinBox{
public:
    DotCommaDoubleSpinBox(QWidget* parent = 0) : QDoubleSpinBox(parent){
    }

protected:
    virtual void keyPressEvent( QKeyEvent * event ){
        if(event->key() == 46)
            QDoubleSpinBox::keyPressEvent(new QKeyEvent(QEvent::KeyPress, 44, Qt::NoModifier, ","));
        else
            QDoubleSpinBox::keyPressEvent(event);
    }
};
NACHTRAG: Copy&Paste funktioniert jedoch nicht, da muss dann noch ein Event her, also das die kopierte Zahl "5.11" eingefügt werden kann.