Qt 4 pb QSlider

hey -  
loupius Messages postés 789 Statut Membre -
Bonjour,

j'ai un QSlider qui prend les min et max dans une bdd , ( ex : -100 et 100) mais le curseur à la valeur 0 se positionne exactement au milieu du min et du max alors que je voudrais que le 0 soit au niveau du -100 !.

a lheure actuelle j'arrive a faire avancer mon slider uniquement quand les valeurs sont positives, des que je choisi de mettre une valeur négative, sa y va , mais sa fait des aller retour entre cette valeur et la valeur 0.....

Merci...

2 réponses

loupius Messages postés 789 Statut Membre 148
 
QtSlider fonctionne très bien. Il suffit simplement de bien l'initialiser (méthodes setMinimum & set Maximum).
Si l'objet est initialisé avec '-100' et '+100', il est tout à fait normal que le '0' se trouve exactement entre les deux.
Si tu veux modifier cet état de fait, tu as deux solutions:
- soit modifier les min et/ou max,
- soit donner la valeur avec un offset.
Bonne continuation.
0
hey
 
peux tu me montrer un exemple avec offset stp,?, j'ai essayé setMinimum set Maximum setSliderPosition et setValue sans succés.....
0
loupius Messages postés 789 Statut Membre 148
 
Exemple d'un QSpinBox qui modifie un QSlider.
Dans la déclaration de classe:
  QSlider*  m_slider;
  QSpinBox* m_spinbox;
Dans le constructeur:
  m_slider = new QSlider;
  m_slider->setRange(-100, +100);
  m_spinbox = new QSpinBox;
  m_spinbox->setRange(-200, +200);
  m_spinbox->setSingleStep(+20);
  // Exemple pour la mise en forme
  QHBoxLayout* hLayout = new QHBoxLayout;
  hLayout->addWidget(m_slider);
  hLayout->addWidget(m_spinbox);
  connect(m_spinbox, SIGNAL(valueChanged(int)),
          m_slider , SLOT(setValue(int))       );
  setLayout(hLayout);
Tu verras que QSlider suit très bien la valeur de QSpinBox et que les valeurs en dehors de sa déclaration ne le perturbe pas.
Pour ajouter un offset, il faut, pour cet exemple, passer par une méthode intermédiaire afin d'ajouter systématiquement un offset, par exemple:
Dans la déclaration de classe:
  QSlider*  m_slider;
  QSpinBox* m_spinbox;
  void ajouteOffset(int value);
Dans le constructeur:
  m_slider = new QSlider;
  m_slider->setRange(-100, +100);
  m_spinbox = new QSpinBox;
  m_spinbox->setRange(-200, +200);
  m_spinbox->setSingleStep(+20);
  // Exemple pour la mise en forme
  QHBoxLayout* hLayout = new QHBoxLayout;
  hLayout->addWidget(m_slider);
  hLayout->addWidget(m_spinbox);
  connect(m_spinbox, SIGNAL(valueChanged(int)),
          this     , SLOT(ajouteOffset(int))       );
  setLayout(hLayout);
Dans la méthode:
TaClasse::ajouteOffset(int value)
{
  m_slider->setValue(value+100);
}
Bonne continuation.
0