Własny validator w Qt

0

Hm.. coś nie mogę sobie poradzić z przygotowaniem własnego validatora, pomimo iż mam przykład od @MarekR22 wyłożony na tacy :( (link: http://4programmers.net/Forum/C_i_C++/222411-walidacja_danych_w_lineeditach )

Może pokaże co mam:
(jest to coś eksperymentalny kod, ponieważ nie mogę załapać "tematu", dlaczego (albo jak to zrobić?) po wywołaniu fixup nie "odświeża" mi wartości w poprzednim QLineEdit .. )

edit//
dodane: input = final;

class Validator : public QValidator
{
    Q_OBJECT

public:
    Validator(QObject * parent = 0);
    Validator::State validate(QString &str, int &pos) const;
    void fixup(QString &str) const;
};

Validator::Validator(QObject * parent) :
    QValidator(parent)
{
}

QValidator::State Validator::validate(QString &input, int &pos) const
{

    if (input.isEmpty())
            return Acceptable;

        quint16 i = input.toInt();
        qDebug() << i;
        if ((i < 1 || i > 5))
            return Intermediate;

        return Acceptable;
}

void Validator::fixup(QString &input) const
{

    QString final;

        for (int i = 0; i < input.length(); ++i) {
            QChar c = input.at(i);
            qDebug() << c;
            if (c.isDigit())
                 final += c;
        }
        input += locale().toString(9);
        input = final;
}

podsumowując: co mam dodać, aby odświeżać wartość w QLineEdit po wywołaniu fixup (z tego przykładu od @MarekR22 (nie wiedząc czemu .. ) nie mogę tego zlokalizować..)

0

QString final ma być poprawioną wersją input? Jeśli tak to input = final pod koniec metody powinno zostać zawołane.

0

po pierwsze opisz co szczególnego ma ten twój validator. jak na razie nie widzę by miał coś więcej niż QIntValidator, a na pewno jest uboższy.
po drugie co właściwie ma robić ten fixup? W zasadzie cyfra po cyfrze robisz kopię tego co dostałeś, przy czym przedostatnia linijka: input += locale().toString(9); nie robi nic, bo następna linijka anuluje jej efekt, na dodatek wygląda bezsensu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1