Meine QSpinBox spinnt
Verfasst: 28. Oktober 2009 14:28
Hallo,
ich habe eine Klasse QSpinBoxX von QSpinBox abgeleitet um die Funktionalität etwas aufzupeppen.
In QSpinBoxX wrden die Methoden textFromValue(...) und valueFromText(...) benutzt wie von Qt vorgesehen.
Leider gibt es ein gravierendes Problem. Der erste Tastendruck wird ignoriert. Meine Methoden werden nicht aufgerufen und das Value-Changed Signal wird nicht abgeschickt.
Weiter unten steht der komplette (abgespeckte) Code. Sehr einfach gehalten. Man kann an der Ausgabe von qWarning() gut erkennen, das die jeweils erste Aktion mit einer Taste ignoriert wird.
bin für jeden Tip dankbar
ich habe eine Klasse QSpinBoxX von QSpinBox abgeleitet um die Funktionalität etwas aufzupeppen.
In QSpinBoxX wrden die Methoden textFromValue(...) und valueFromText(...) benutzt wie von Qt vorgesehen.
Leider gibt es ein gravierendes Problem. Der erste Tastendruck wird ignoriert. Meine Methoden werden nicht aufgerufen und das Value-Changed Signal wird nicht abgeschickt.
Weiter unten steht der komplette (abgespeckte) Code. Sehr einfach gehalten. Man kann an der Ausgabe von qWarning() gut erkennen, das die jeweils erste Aktion mit einer Taste ignoriert wird.
bin für jeden Tip dankbar
Code: Alles auswählen
#include <QtCore>
#include <QtGui>
class QSpinBoxX : public QSpinBox
//################################
{
public:
QSpinBoxX(QWidget* Parent = 0);
protected:
int valueFromText(const QString& Text) const;
QString textFromValue(int Value) const;
private:
QLocale Locale;
};
QSpinBoxX::QSpinBoxX (QWidget* Parent)
//##################
: QSpinBox(Parent)
{
Locale = QLocale::system();
}
QString QSpinBoxX::textFromValue (int Value) const
//##############################
{
qWarning() << "textFromValue" << Value;
if ( this->hasFocus() )
return QSpinBox::textFromValue(Value);
else
return Locale.toString(Value);
}
int QSpinBoxX::valueFromText (const QString& Text) const
//##########################
{
qWarning() << "valueFromText" << Text;
if ( this->hasFocus() )
return QSpinBox::valueFromText(Text);
else {
bool Ok = false;
QString TextTemp = Text;
TextTemp.replace(prefix(), "");
TextTemp.replace(suffix(), "");
return Locale.toInt(TextTemp, &Ok);
}
}
int main ( int Argc, char ** Argv )
//######
{
QApplication App(Argc, Argv);
QSpinBoxX* X = new QSpinBoxX(NULL);
X->setPrefix("prefix ");
X->setSuffix(" suffix");
X->setRange(-12345678, +12345678);
X->setSingleStep(900);
X->setAccelerated(true);
X->setValue(123456);
X->setGeometry(200,200,400,200);
X->setFont(QFont("Times", 20, QFont::Bold));
X->show();
return App.exec();
}