Bonjour a tous,

Je souhaite afficher la valeur maximum de ma qdoublespinbox lorsque je rentre une valeur supérieure à celle-ci (par exemple si le max est 100 et que j'écris 105 alors la valeur affichée sera 100).

La seule solution que j'ai trouvée c'est de dériver de qdoublespinbox pour surcharger validate().

Voici le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
DoubleSpinBoxSupport::DoubleSpinBoxSupport( QWidget * parent):QDoubleSpinBox(parent)
{
 
	connect(this, SIGNAL(changevaluetomax_si()), this, SLOT(changevaluetomax_sl()) );
 
}
 
QValidator::State DoubleSpinBoxSupport::validate( QString & input, int & pos ) const
{
//il y a un suffix de 2 caractères
	if(input.length()>2)
	{
		QString newtext = input.left(input.length()-2);
 
		if( newtext.toDouble()>this->maximum() )
		{
			emit changevaluetomax_si();
 
			return QValidator::Acceptable;
		}
 
	}
	return QDoubleSpinBox::validate(input, pos);
}
 
void DoubleSpinBoxSupport::changevaluetomax_sl()
{
	this->setValue(this->maximum());
}
En debuggant je vois bien que mon test fonctionne, seulement à la fin, la valeur est réinitialisée à 0 (le minimum).

Quelqu'un peut-il m'expliquer ? Il y a t il une autre solution ?

Merci par avance.