QspinBox (Qt)

Fermé
Bona - 14 mai 2008 à 14:50
 Bona - 16 mai 2008 à 11:02
Bonjour,
je suis en train de travailler sur une IHM qui utilise la librairie Qt, sur le designer j'ai ma SpinBox le problème est le suivant :
1. pour la premiere SpinBox les valeurs min et max je veux pas qu'ils soient fixes je veux les définirs selon deux variables qui representent les bornes min et max et qui sont utilisées dans un autre fichier du meme programme.
2. sur l'IHM quand un utilisateur change la valeur courante de la première SpinBox ça engendre la variation des valeurs de la deuxiemes SpinBox qui sont definit aussi dans un autre fichier.
exemple :
SpinBox1: valeurs: X =0...6
quand X=0-> SpinBox2 affiche la liste 4...20 (exemple)
quand X=3-> SpinBox2 affiche la liste 5...9 (exemple)
Je voudrais savoir s'il y a un moyen de le faire!!
merci d'avance pour vos réponses.
Bona

2 réponses

Salut,

A priori, tu dois utiliser la fonction setRange(min,max) de la spinbox pour redéfinir son domaine.

Tu peux si tu le souhaites en faire la demande à l'utilisateur avec les fonctions QInputDialog.

prototype :
int getInteger ( QWidget * parent, const QString & title, const QString & label, int value = 0, int minValue = -2147483647, int maxValue = 2147483647, int step = 1, bool * ok = 0, Qt::WindowFlags f = 0 )

min = QInputDialog::getInteger(0,QString("Titre"),QString("Entrer un entier"));
idem pour max.

Ensuite, il faut appeler la fonction redéfinissant le domaine de la spinbox.

spinbox->setRange(min,max);

Je n'ai pas testé mais ca devrait être suffisant. Si ça ne fonctionne pas, il faudra peut être vérifier qu'il n'y ait pas de fonction update() pour actualiser la valeur de la spinbox à l'écran.

Pour connecter les deux spinbox ensemble, tu auras à mon avis besoin d'utiliser des signaux. Je te renvoie à la doc de référence : http://doc.trolltech.com/4.4/signalsandslots.html

Tu devrais écrire quelque chose ressemblant à cela pour les signaux :

connect(spinbox1,SIGNAL(valueChanged(int)),taFenetre,SLOT(maFonction(int)));

Tu appelles ainsi ta fonction (à définir) maFonction(int) qui recoit en paramètre la valeur de la spinbox 1. Tu peux ensuite dans le corps de cette fonction appeler spinbox2->setRange pour faire ce que tu désires. Penses à déclarer cette fonction comme un slot Qt et à générer le moc associé.

J'espère avoir été clair. La doc devrait t'aider.

A +
0
bonjour,
très utile merci je vais tester
Bona
0