Probleme variables Qt C++
fredrizk
-
fredrizk Messages postés 12 Date d'inscription Statut Membre Dernière intervention -
fredrizk Messages postés 12 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je developpe un logiciel sous windows 7 (32bit), avec Qt, 4.7.3 en C++.
j'ai redigé la quasi totalisée du code source mais je suis face à un problème : mes variable garde leur valeur d'initialisation et j'arrive pas à leur affectée de nouvelles valeurs.
je met une partie du code en esérant avoir une réponse.
Merci d'avance.
fichier.h
#ifndef CALDEBIT_H
#define CALDEBIT_H
#include <QWidget>
class QDoubleSpinBox;
class QGroupBox;
class QLabel;
class QPushButton;
class QAction;
class QMessageBox ;
class QString ;
class QPixmap;
class Window : public QWidget
{
Q_OBJECT
public:
Window();
double Ivalcote;
double Ivalcote1;
double Ivaldebit;
double valcote;
double valcote1;
double valdebit;
void Init()
{
Ivalcote = 0;
Ivalcote1 =0;
Ivaldebit=0;
}
public slots:
void Resultats();
double calculs();
void OnClick();
private:
double CoteDebit();
void Boutons();
void quit();
void setText();
QDoubleSpinBox *doubleSpinBox;
QGroupBox *spinBoxesGroup;
QGroupBox *editsGroup;
QGroupBox *doubleSpinBoxesGroup;
QLabel *label;
QLabel *datetimeedit;
QPushButton *boutonok;
QPushButton *boutonQuitter;
QAction *exitAction;
QString *res;
QString *res1;
QString *Qs;
};
#endif // CALDEBIT_H
fichier.cpp
#include <QtGui>
#include <QVBoxLayout>
#include <QFormLayout>
#include <QTime>
#include "caldebit.h"
/*======================================================================================================================
DECLARATION DE LA FENETRE PRINCIPAL DU LOGICIEL
======================================================================================================================*/
Window::Window()
{
Init();
CoteDebit();
Boutons();
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(spinBoxesGroup);
layout->addWidget(editsGroup);
layout->addWidget(doubleSpinBoxesGroup);
setLayout(layout);
setWindowTitle(tr("Calculateur du Barrahe de Villerest"));
}
/*======================================================================================================================
FONCTION PERMETTANT DE RECUPERER LES VALEURS DES COTES ET DU DEBIT ET DE LES STOCKER
======================================================================================================================*/
double Window::CoteDebit()
{
spinBoxesGroup = new QGroupBox(tr("Cotes et Débit : "));
QLabel *retenue = new QLabel(tr("Entrer la cote de la retenue précedente : "));
QDoubleSpinBox *SpinBox = new QDoubleSpinBox;
SpinBox->setRange(270, 325);
SpinBox->setSingleStep(0.01);
SpinBox->setValue(0);
valcote = SpinBox->value();
QLabel *retenueactuelle = new QLabel(tr("Entrer la cote de la retenue actuelle : "));
QDoubleSpinBox *retactu = new QDoubleSpinBox;
retactu->setRange(270, 325);
retactu->setSingleStep(0.01);
retactu->setValue(0);
valcote1 = retactu->value();
QLabel *debitsortant = new QLabel(tr("Entrer la valeur du débit sortant actuel : "));
QDoubleSpinBox *debsor = new QDoubleSpinBox;
debsor->setRange(0, 4000);
debsor->setSingleStep(0.01);
debsor->setValue(0);
valdebit = debsor->value();
QGridLayout *spinBoxLayout = new QGridLayout;
spinBoxLayout->addWidget(retenue,0,0);
spinBoxLayout->addWidget(SpinBox,1,0);
spinBoxLayout->addWidget(retenueactuelle,3,0);
spinBoxLayout->addWidget(retactu,4,0);
spinBoxLayout->addWidget(debitsortant,6,0);
spinBoxLayout->addWidget(debsor,7,0);
spinBoxesGroup->setLayout(spinBoxLayout);
Ivalcote=valcote;
Ivalcote1=valcote1;
Ivaldebit=valdebit;
return Ivalcote;
return Ivalcote1;
return Ivaldebit;
}
/*======================================================================================================================
LES RESULTATS
======================================================================================================================*/
void Window::Resultats()
{
QString res ;
res.setNum (Ivalcote);
QString res1;
res1.setNum (Ivalcote1);
QString Qs ;
Qs.setNum(Ivaldebit);
qDebug() << "la première cote de la retenue est au niveau"<<Ivalcote<<"NGF.";
qDebug() << "la deuxième cote de la retenue est au niveau"<<Ivalcote1<<"NGF.";
qDebug() << "le débit sortant est de"<<Ivaldebit<<"M3/s.";
QMessageBox::information(this, "Resultats", "\n A la cote " + res.setNum (Ivalcote) + " NGF le volume de la retenue est de " " \n\n"
"A la cote " + res.setNum (Ivalcote1) + " NGF le volume de la retenue est de " " \n\n"
"le debit sortant est de : " + Qs.setNum(Ivaldebit)+ " M3/s \n\n"
}
Je developpe un logiciel sous windows 7 (32bit), avec Qt, 4.7.3 en C++.
j'ai redigé la quasi totalisée du code source mais je suis face à un problème : mes variable garde leur valeur d'initialisation et j'arrive pas à leur affectée de nouvelles valeurs.
je met une partie du code en esérant avoir une réponse.
Merci d'avance.
fichier.h
#ifndef CALDEBIT_H
#define CALDEBIT_H
#include <QWidget>
class QDoubleSpinBox;
class QGroupBox;
class QLabel;
class QPushButton;
class QAction;
class QMessageBox ;
class QString ;
class QPixmap;
class Window : public QWidget
{
Q_OBJECT
public:
Window();
double Ivalcote;
double Ivalcote1;
double Ivaldebit;
double valcote;
double valcote1;
double valdebit;
void Init()
{
Ivalcote = 0;
Ivalcote1 =0;
Ivaldebit=0;
}
public slots:
void Resultats();
double calculs();
void OnClick();
private:
double CoteDebit();
void Boutons();
void quit();
void setText();
QDoubleSpinBox *doubleSpinBox;
QGroupBox *spinBoxesGroup;
QGroupBox *editsGroup;
QGroupBox *doubleSpinBoxesGroup;
QLabel *label;
QLabel *datetimeedit;
QPushButton *boutonok;
QPushButton *boutonQuitter;
QAction *exitAction;
QString *res;
QString *res1;
QString *Qs;
};
#endif // CALDEBIT_H
fichier.cpp
#include <QtGui>
#include <QVBoxLayout>
#include <QFormLayout>
#include <QTime>
#include "caldebit.h"
/*======================================================================================================================
DECLARATION DE LA FENETRE PRINCIPAL DU LOGICIEL
======================================================================================================================*/
Window::Window()
{
Init();
CoteDebit();
Boutons();
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(spinBoxesGroup);
layout->addWidget(editsGroup);
layout->addWidget(doubleSpinBoxesGroup);
setLayout(layout);
setWindowTitle(tr("Calculateur du Barrahe de Villerest"));
}
/*======================================================================================================================
FONCTION PERMETTANT DE RECUPERER LES VALEURS DES COTES ET DU DEBIT ET DE LES STOCKER
======================================================================================================================*/
double Window::CoteDebit()
{
spinBoxesGroup = new QGroupBox(tr("Cotes et Débit : "));
QLabel *retenue = new QLabel(tr("Entrer la cote de la retenue précedente : "));
QDoubleSpinBox *SpinBox = new QDoubleSpinBox;
SpinBox->setRange(270, 325);
SpinBox->setSingleStep(0.01);
SpinBox->setValue(0);
valcote = SpinBox->value();
QLabel *retenueactuelle = new QLabel(tr("Entrer la cote de la retenue actuelle : "));
QDoubleSpinBox *retactu = new QDoubleSpinBox;
retactu->setRange(270, 325);
retactu->setSingleStep(0.01);
retactu->setValue(0);
valcote1 = retactu->value();
QLabel *debitsortant = new QLabel(tr("Entrer la valeur du débit sortant actuel : "));
QDoubleSpinBox *debsor = new QDoubleSpinBox;
debsor->setRange(0, 4000);
debsor->setSingleStep(0.01);
debsor->setValue(0);
valdebit = debsor->value();
QGridLayout *spinBoxLayout = new QGridLayout;
spinBoxLayout->addWidget(retenue,0,0);
spinBoxLayout->addWidget(SpinBox,1,0);
spinBoxLayout->addWidget(retenueactuelle,3,0);
spinBoxLayout->addWidget(retactu,4,0);
spinBoxLayout->addWidget(debitsortant,6,0);
spinBoxLayout->addWidget(debsor,7,0);
spinBoxesGroup->setLayout(spinBoxLayout);
Ivalcote=valcote;
Ivalcote1=valcote1;
Ivaldebit=valdebit;
return Ivalcote;
return Ivalcote1;
return Ivaldebit;
}
/*======================================================================================================================
LES RESULTATS
======================================================================================================================*/
void Window::Resultats()
{
QString res ;
res.setNum (Ivalcote);
QString res1;
res1.setNum (Ivalcote1);
QString Qs ;
Qs.setNum(Ivaldebit);
qDebug() << "la première cote de la retenue est au niveau"<<Ivalcote<<"NGF.";
qDebug() << "la deuxième cote de la retenue est au niveau"<<Ivalcote1<<"NGF.";
qDebug() << "le débit sortant est de"<<Ivaldebit<<"M3/s.";
QMessageBox::information(this, "Resultats", "\n A la cote " + res.setNum (Ivalcote) + " NGF le volume de la retenue est de " " \n\n"
"A la cote " + res.setNum (Ivalcote1) + " NGF le volume de la retenue est de " " \n\n"
"le debit sortant est de : " + Qs.setNum(Ivaldebit)+ " M3/s \n\n"
}
A voir également:
- Probleme variables Qt C++
- Qt sdk - Télécharger - Langages
- Qt web - Télécharger - Navigateurs
- Qt tab bar - Télécharger - Personnalisation
- [C++/QT] probleme erreur de segmentation ✓ - Forum C++
- Algorithme permutation 3 variables - Forum Programmation
4 réponses
Hum... Je pense que tu n'as pas bien compris comment fonctionne Qt ou le C++.
il faut que tu fasses une fonction qui mette à jour tes variables, puis faire une connection entre le signal de changement de valeur (des psinbox) et la fonction modifiant les valeurs de la classe.
il faut que tu fasses une fonction qui mette à jour tes variables, puis faire une connection entre le signal de changement de valeur (des psinbox) et la fonction modifiant les valeurs de la classe.
Bonjour Char Snipeur
Serait-il possible de me faire un petit exemple car je dois avouer que je suis complètement perdu.
Je te remercie d'avance
Serait-il possible de me faire un petit exemple car je dois avouer que je suis complètement perdu.
Je te remercie d'avance
double Window::CoteDebit() { spinBoxesGroup = new QGroupBox(tr("Cotes et Débit : ")); QLabel *retenue = new QLabel(tr("Entrer la cote de la retenue précedente : ")); QDoubleSpinBox *SpinBox = new QDoubleSpinBox; SpinBox->setRange(270, 325); SpinBox->setSingleStep(0.01); SpinBox->setValue(0); valcote = SpinBox->value(); QLabel *retenueactuelle = new QLabel(tr("Entrer la cote de la retenue actuelle : ")); QDoubleSpinBox *retactu = new QDoubleSpinBox; retactu->setRange(270, 325); retactu->setSingleStep(0.01); retactu->setValue(0); valcote1 = retactu->value(); QLabel *debitsortant = new QLabel(tr("Entrer la valeur du débit sortant actuel : ")); QDoubleSpinBox *debsor = new QDoubleSpinBox; debsor->setRange(0, 4000); debsor->setSingleStep(0.01); debsor->setValue(0); valdebit = debsor->value(); QGridLayout *spinBoxLayout = new QGridLayout; spinBoxLayout->addWidget(retenue,0,0); spinBoxLayout->addWidget(SpinBox,1,0); spinBoxLayout->addWidget(retenueactuelle,3,0); spinBoxLayout->addWidget(retactu,4,0); spinBoxLayout->addWidget(debitsortant,6,0); spinBoxLayout->addWidget(debsor,7,0); spinBoxesGroup->setLayout(spinBoxLayout); connect(SpinBox,SIGNAL(changed(double)),this,SLOT(maj()) ); connect(retactu,SIGNAL(changed(double)),this,SLOT(maj()) ); ... return 0; } ////////////////////////// fonction à mettre dans les SLOT. void Window::maj() { valcote = SpinBox->value(); valcote1 = retactu->value(); valdebit = debsor->value(); Ivalcote=valcote; Ivalcote1=valcote1; Ivaldebit=valdebit; }
voilà ce que ça donne par exemple. Seulement, ça ne fonctionnera pas car tu utilise des variables temporaire pour te objet de type spinbox.
Une solution est de faire des fonction maj_SpinBox(double) en récupérant la valeur émisse par le signal.
connect(SpinBox,SIGNAL(changed(double)),this,SLOT(maj_SpinBox(double)) ); ... void maj_SpinBox(double a) { valcote=a; }
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur