Seite 1 von 1

Meine QSpinBox spinnt

Verfasst: 28. Oktober 2009 14:28
von Troll.Soft
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

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();
}