Marcin
B.
Ruby on rails
developer, Software
Engineer in test and
So...
Temat: Własny event przy zmianie wartości dla QSpinBox
Witam.Napisałem program do sprawdzania losowań dużego lotka.
Liczby są umieszczone w kontrolce QSpinBox.
Po każdej zmianie wartości kontrolka sprawdza czy jej wartość znajduje się na liście wylosowanych liczb.
Moje rozwiązanie jest takie. Mam własny filtr, który podpinam do tych kontrolek:
filter.reset( new FilterModifiedChange( this, numbers, font, newFont, color ) );
form->spinBox_1->installEventFilter( filter.get() );
A samo filtrowanie odbywa się tak:
bool FilterModifiedChange::eventFilter(QObject *obj, QEvent *event)
{
QFocusEvent* fEvent = static_cast< QFocusEvent* > ( event );
if( fEvent && ( fEvent->type() == QEvent::FocusOut ) ) { // obejscie
QSpinBox* spinBox = parent->findChild< QSpinBox* >( obj->objectName() );
changeColorsAndFont( spinBox );
return QObject::eventFilter(obj, event);
} else {
// standard event processing
return QObject::eventFilter(obj, event);
}
}
Uważam jednak, że zastosowanie typu eventu QEvent::FocusOut jest obejściem,
dodatkowo w aplikacji muszę oprogramować każdą zmianę wartości w tej kontrolce, aby kolorować wylosowane liczby (i tak właśnie robie) np. losowe generowanie liczb.
Jednak wydaje mi się to drogą na około. Nie znalazłem jednak eventa odpowiedzialnego za zmianę wartości w danej kontrolce.
Wobec tego moje pytanie brzmi:
czy można zdefiniować taki event, który będzie emitowany za każdym razem, gdy zmieni się wartość w kontrolce QSpinBox bez konieczności tworzenia pochodnej klasy QSpinBox ?
Jeśli tak to jak podpiąć taki event do kontrolki ?
Jakie są alternatywne, ale efektywne i eleganckie rozwiązania tego problemu ?
Wasze sugestie proszę poprzeć fragmentem kodu.
Pozdrawiam :)