Moin,
für ein Buchhaltungsprogramm habe ich ein 'Währungseingabefeld' erstellt, das von QLineEdit abgeleitet wurde und beim Verlassen des Feldes die Eingabe mit zwei Nachkommastellen formatiert. Daszu habe ich die FocusOutEventMethode überschrieben:
Code: Alles auswählen
void kgvDoubleLineEdit::focusOutEvent ( QFocusEvent * event )
{
setText ( m_formatDouble ( text().toDouble()) );
QLineEdit::focusOutEvent ( event );
}
Das funktioniert soweit auch. Nun sind aber an einigen Stellen weitere Gültigkeitsprüfungen erforderlich (z.B. Prüfung auf Ober- und Untergrenzen) erforderlich. An diesen Stellen verbinde ich dann das Signal 'editingFinished' mit einem entsprechenden Slot, in dem ich dann die Gültigkeitsprüfung vornehme, ggf. eine entsprechende Meldung ausgebe und den Fokus wieder auf das entsprechende Eingabefeld setze:
Code: Alles auswählen
void mydialog::slotKaufPreisChanged()
{
if ( editPreis.text(9.toDouble() < 100 )
{
m_showMessage ( trUtf8 ( "Der Preis muss mindestens 100 EUR betragen!" ) );
editPreis->setFocus();
}
}
Der o.g. Code funktioniert, solange der Benutzer mit der Tab-Taste durch den Dialog navigiert. Gibt er aber im o.g. Beispiel einen Preis kleiner 100 EUR ein und klickt dann mit der Maus in ein anderes Eingabefeld stürzt das Programm ab. Der Debugger spukt hunderte von Zeilen mit FocusOut und FocusIn-Events an, die mit einem Absturz in den Tiefen der QT-Libs (Qt 4.8.3 / Chakra Linux) enden. Vielleicht hat jemand eine Idee, wie ich das eleganter lösen kann?
Vielen Dank und viele Grüße
Michael