Commit 62a1b218 authored by Maxime Goret's avatar Maxime Goret
Browse files

Merge

parents 4f56c8d3 79d70f00
Pipeline #79750 passed with stage
in 15 seconds
...@@ -8,3 +8,7 @@ Dépendances : compilateur C++11, Qt ...@@ -8,3 +8,7 @@ Dépendances : compilateur C++11, Qt
qmake qmake
make make
``` ```
## Documentation
La documentation du projet et de ses classe est générée automatiquement par la CI et est disponible [ici](https://rdelaage.gitlab.utc.fr/lo21-projet/).
...@@ -26,8 +26,10 @@ class Automate { ...@@ -26,8 +26,10 @@ class Automate {
std::string author; std::string author;
std::string desc; std::string desc;
EnsembleEtat ensemble; EnsembleEtat ensemble;
int nbStep;
int nbCycle;
Automate(): title(""), delai(500), fonction(nullptr), regleVoisinage(nullptr), itBuffer(buffer.begin()), h(0), l(0), reseauInit(Reseau(0, 0)), year(2000), author("Anonym"), desc("") { timer.automate = this; } Automate(): title(""), delai(500), fonction(nullptr), regleVoisinage(nullptr), itBuffer(buffer.begin()), h(0), l(0), reseauInit(Reseau(0, 0)), year(2000), author("Anonym"), desc(""), nbStep(0), nbCycle(0) { timer.automate = this; }
Automate(const Automate& a) = delete; Automate(const Automate& a) = delete;
Automate& operator=(const Automate& a) = delete; Automate& operator=(const Automate& a) = delete;
class Timer: public QObject { class Timer: public QObject {
...@@ -107,12 +109,7 @@ class Automate { ...@@ -107,12 +109,7 @@ class Automate {
void reset() { buffer.clear(); buffer.push_back(reseauInit); } void reset() { buffer.clear(); buffer.push_back(reseauInit); }
/// Se placer sur l'état suivant du buffer et le calculer s'il n'y en a plus de disponible /// Se placer sur l'état suivant du buffer et le calculer s'il n'y en a plus de disponible
void step() { void step();
if(itBuffer==(--buffer.end()))
nextTimer();
itBuffer++;
AutoCell::getInstance().afficherGrille(&*itBuffer);
}
/// Execution multiple de la méthode step /// Execution multiple de la méthode step
void run(int n) { void run(int n) {
for(int i=0;i<n;i++) for(int i=0;i<n;i++)
...@@ -159,7 +156,15 @@ class Automate { ...@@ -159,7 +156,15 @@ class Automate {
/// Définir le comportement aux frontières /// Définir le comportement aux frontières
void setMatriceTorique(const bool val) { regleVoisinage->setMatriceTorique(val); } void setMatriceTorique(const bool val) { regleVoisinage->setMatriceTorique(val); }
/// Obtenir le comportement aux frontières
bool getMatriceTorique() { return regleVoisinage->getMatriceTorique(); } bool getMatriceTorique() { return regleVoisinage->getMatriceTorique(); }
/// Obtenir le nombre d'étapes effectuées
int getNbStep() const { return nbStep; }
/// Obtenir le nombre d'étapes nécessaires pour effectuer un cycle
///
/// Retourne 0 s'il n'a pas encore pu être calculé
int getNbCycle() const { return nbCycle; }
}; };
#endif #endif
...@@ -73,6 +73,11 @@ class AutoCell : public QWidget ...@@ -73,6 +73,11 @@ class AutoCell : public QWidget
QPushButton* button_next; QPushButton* button_next;
QPushButton* button_reinitialiser; QPushButton* button_reinitialiser;
QLabel* lab_nb_step;
QLineEdit* edit_nb_step;
QLabel* lab_periode;
QLineEdit* edit_periode;
QLabel* lab_sauv_grille; QLabel* lab_sauv_grille;
QLineEdit* edit_nom_grille; QLineEdit* edit_nom_grille;
QPushButton* button_save_grid; QPushButton* button_save_grid;
...@@ -81,10 +86,6 @@ class AutoCell : public QWidget ...@@ -81,10 +86,6 @@ class AutoCell : public QWidget
QWidget* win_grid; QWidget* win_grid;
QTableWidget* grid; QTableWidget* grid;
//notice
QWidget* win_notice;
QLabel* lab_notice;
explicit AutoCell(QWidget* parent=nullptr); explicit AutoCell(QWidget* parent=nullptr);
friend class NouveauModele; friend class NouveauModele;
public: public:
...@@ -131,7 +132,7 @@ class AutoCell : public QWidget ...@@ -131,7 +132,7 @@ class AutoCell : public QWidget
/// Initialiser un automate par son nom /// Initialiser un automate par son nom
void initAutomate(const QString& name); void initAutomate(const QString& name);
/// Changer le délai de l'automate /// Changer le délai de l'automate
void changeDelai(int i); void changeDelai();
/// Aller en arrière dans la simulation /// Aller en arrière dans la simulation
void previous(); void previous();
/// Aller en avant dans la simulation /// Aller en avant dans la simulation
......
...@@ -27,7 +27,7 @@ class ParamAlpha: public QWidget { ...@@ -27,7 +27,7 @@ class ParamAlpha: public QWidget {
public: public:
/// Construire une fenêtre de paramétrage de l'alphabet /// Construire une fenêtre de paramétrage de l'alphabet
/// @param[in] nbEtats nombre d'états à initialiser /// @param[in] nbEtats nombre d'états à initialiser
ParamAlpha(const int nbEtats); ParamAlpha(const int nbEtats, const QWidget* parent);
public slots: public slots:
/// Valider le paramétrage de l'alphabet, a pour effet de l'initialiser dans l'automate /// Valider le paramétrage de l'alphabet, a pour effet de l'initialiser dans l'automate
void valide(); void valide();
......
...@@ -19,97 +19,130 @@ ...@@ -19,97 +19,130 @@
using namespace std; using namespace std;
/// Classe conteneur d'un voisinage
///
/// Elle contient l'ensemble des voisins d'une cellule après application d'une règle de voisinage et définit la cellule au centre du voisinage
class Voisinage { class Voisinage {
private : private :
const Cellule* celluleCentre; const Cellule* celluleCentre;
vector<Cellule*> voisinage; vector<Cellule*> voisinage;
friend class RegleVoisinage;
friend class RegleVoisinageMoore;
friend class RegleVoisinageNeumann;
friend class RegleVoisinageArbitraire;
friend class VoisinageIterator;
public:
class VoisinageIterator {
const Voisinage *vsn;
size_t i;
public :
VoisinageIterator(const Voisinage *v){
vsn = v;
}
void first(){
i = 0;
}
void next(){
i++;
}
bool isDone(){
return !(i < vsn->voisinage.size());
}
Cellule* currentItem(){
return vsn->voisinage[i];
}
};
Voisinage(const Cellule* centre) : celluleCentre(centre) {} friend class RegleVoisinage;
~Voisinage(); friend class RegleVoisinageMoore;
Cellule getCelluleCentre()const {return *celluleCentre;} friend class RegleVoisinageNeumann;
friend class RegleVoisinageArbitraire;
friend class VoisinageIterator;
VoisinageIterator *creerIterator()const{ public:
return new VoisinageIterator(this); /// Classe d'itérateur sur les cellules contenus dans le voisinage
} class VoisinageIterator {
const Voisinage *vsn;
size_t i;
public :
///Construire un itérateur sur le voisinage
VoisinageIterator(const Voisinage *v) { vsn = v; }
/// place l'itérateur sur le premier élément
void first() { i = 0; }
/// placer l'itérateur sur l'élément suivant
void next() { i++; }
/// vérifier si les itérations sont terminées
bool isDone() { return !(i < vsn->voisinage.size()); }
/// Récupérer l'élément courant de l'itérateur
Cellule* currentItem() { return vsn->voisinage[i]; }
};
Voisinage(const Cellule* centre): celluleCentre(centre) {}
~Voisinage();
/// Obtenir la cellule au centre du voisinage
Cellule getCelluleCentre() const { return *celluleCentre; }
/// Créer un itérateur sur les cellules du voisinage
VoisinageIterator *creerIterator() const { return new VoisinageIterator(this); }
}; };
/// Classe mère abtraite de toutes les règles de voisinage
class RegleVoisinage{ class RegleVoisinage{
private: private:
bool matriceTorique; bool matriceTorique;
public : public :
/// Calculer un voisinage sur un réseau à partir de la règle
/// @param[in] v Objet Voisinage dans lequel on souhaite stocker les voisins
/// @param[in] r Réseau à partir duquel on souhaite calculer le voisinage
virtual void calculVoisinage(Voisinage& v, const Reseau& r) const = 0; virtual void calculVoisinage(Voisinage& v, const Reseau& r) const = 0;
/// Obtenir le type de la règle de voisinage
///
/// Principalement utilisé pour la sauvegarde
virtual int getType() const = 0; virtual int getType() const = 0;
/// Renvoie le rayon d'une règle de voisinage, 0 si ce n'est pas pertinant pour ce voisinage (arbitraire, ...) /// Renvoie le rayon d'une règle de voisinage, 0 si ce n'est pas pertinant pour ce voisinage (arbitraire, ...)
///
/// Principalement utilisé pour la sauvegarde
virtual unsigned int getr() const { return 0; } virtual unsigned int getr() const { return 0; }
virtual ~RegleVoisinage() = default; virtual ~RegleVoisinage() = default;
/// Définir le comportement aux frontières du voisinage
///
/// Si true, on se comporte comme une matrice torique, quand on arrive en haut on continu en utilisant les lignes du bas, de même pour quand on est à gauche ou à droite de la matrice
/// Si false, on ne prend pas en compte les voisins au delà de la matrice affichée.
void setMatriceTorique(const bool val) { matriceTorique = val; } void setMatriceTorique(const bool val) { matriceTorique = val; }
/// Obtenir l'état du comportement aux frontières
bool getMatriceTorique() const { return matriceTorique; } bool getMatriceTorique() const { return matriceTorique; }
}; };
/// Règle générale pour un voisinage de Von Neumann
class RegleVoisinageNeumann : public RegleVoisinage { class RegleVoisinageNeumann : public RegleVoisinage {
private: private:
unsigned int rayon; unsigned int rayon;
public: public:
/// Calculer un voisinage sur un réseau à partir de la règle
/// @param[in] v Objet Voisinage dans lequel on souhaite stocker les voisins
/// @param[in] r Réseau à partir duquel on souhaite calculer le voisinage
void calculVoisinage(Voisinage& v, const Reseau& r) const override; void calculVoisinage(Voisinage& v, const Reseau& r) const override;
/// Définir le rayon du voisinage
void setr(unsigned int r) { rayon = r; } void setr(unsigned int r) { rayon = r; }
unsigned int getr() const override { return rayon; } /// Obtenir le rayon du voisinage
int getType() const override { return 1; } unsigned int getr() const override { return rayon; }
/// Obtenir le type de la règle de voisinage
///
/// Principalement utilisé pour la sauvegarde
int getType() const override { return 1; }
}; };
/// Règle générale pour un voisinage de Moore
class RegleVoisinageMoore : public RegleVoisinage { class RegleVoisinageMoore : public RegleVoisinage {
private: private:
unsigned int rayon; unsigned int rayon;
public: public:
/// Calculer un voisinage sur un réseau à partir de la règle
/// @param[in] v Objet Voisinage dans lequel on souhaite stocker les voisins
/// @param[in] r Réseau à partir duquel on souhaite calculer le voisinage
void calculVoisinage(Voisinage& v, const Reseau& r) const override; void calculVoisinage(Voisinage& v, const Reseau& r) const override;
/// Définir le rayon du voisinage
void setr(unsigned int r) { rayon = r; } void setr(unsigned int r) { rayon = r; }
unsigned int getr() const override { return rayon; } /// Obtenir le rayon du voisinage
int getType() const override { return 2; } unsigned int getr() const override { return rayon; }
/// Obtenir le type de la règle de voisinage
///
/// Principalement utilisé pour la sauvegarde
int getType() const override { return 2; }
}; };
class RegleVoisinageArbitraire : public RegleVoisinage { //définit la règle pour le voisinage arbitraire ///définit la règle pour le voisinage arbitraire
private: class RegleVoisinageArbitraire : public RegleVoisinage {
unsigned int nbVoisin; public:
public: /// Obtenir le type de la règle de voisinage
int getType() const override{ return 3; } ///
void setNbVoisins(unsigned int r) { nbVoisin = r; } /// Principalement utilisé pour la sauvegarde
unsigned int getNbVoisin() { return nbVoisin; } int getType() const override{ return 3; }
vector<Coordonnees> coordonnees; /// Obtenir le nombre de voisins de cette règle de voisinage
void calculVoisinage(Voisinage& v, const Reseau& r) const override; // Calcul du voisinage en fonction de la cellule centre unsigned int getNbVoisin() { return coordonnees.size(); }
vector<Coordonnees> getVoisinage(const QTableWidget* grid ); // Dééfinition des coordonnées relatives pour le calcul du voisinage /// coordonnées relatives des voisins d'une cellule
vector<Coordonnees> coordonnees;
/// Calculer un voisinage sur un réseau à partir de la règle
/// @param[in] v Objet Voisinage dans lequel on souhaite stocker les voisins
/// @param[in] r Réseau à partir duquel on souhaite calculer le voisinage
void calculVoisinage(Voisinage& v, const Reseau& r) const override;
/// Obtenir les coordonnées relative d'un voisinage arbitraire en fonction d'un outil QTableWidget
vector<Coordonnees> getVoisinage(const QTableWidget* grid );
}; };
#endif /* voisinage_h */ #endif /* voisinage_h */
...@@ -44,3 +44,14 @@ void Automate::reinitialiserAutomate() { ...@@ -44,3 +44,14 @@ void Automate::reinitialiserAutomate() {
desc = ""; desc = "";
ensemble.reset(); ensemble.reset();
} }
void Automate::step() {
if(itBuffer==(--buffer.end())) {
nextTimer();
++nbStep;
}
itBuffer++;
if(nbCycle == 0 && *(--buffer.end()) == reseauInit)
nbCycle = nbStep;
AutoCell::getInstance().afficherGrille(&*itBuffer);
}
...@@ -36,8 +36,8 @@ std::unique_ptr<AutoCell> AutoCell::instance = nullptr; ...@@ -36,8 +36,8 @@ std::unique_ptr<AutoCell> AutoCell::instance = nullptr;
AutoCell::AutoCell(QWidget* parent):QWidget(parent) AutoCell::AutoCell(QWidget* parent):QWidget(parent)
{ {
this->setWindowTitle("Automate cellulaire"); this->setWindowTitle("Automate cellulaire");
this->setMinimumSize(1150, 650); this->setMinimumSize(1000, 650);
//division en frame de la fenêtre de l'application //division en frame de la fenêtre de l'application
...@@ -134,10 +134,10 @@ AutoCell::AutoCell(QWidget* parent):QWidget(parent) ...@@ -134,10 +134,10 @@ AutoCell::AutoCell(QWidget* parent):QWidget(parent)
grid_run_control = new QGridLayout(win_run_ctrl); grid_run_control = new QGridLayout(win_run_ctrl);
grid_run_control->setColumnMinimumWidth(1,100); grid_run_control->setColumnMinimumWidth(1,80);
grid_run_control->setColumnMinimumWidth(2,100); grid_run_control->setColumnMinimumWidth(2,80);
grid_run_control->setRowMinimumHeight(3,80); grid_run_control->setRowMinimumHeight(3,80);
grid_run_control->setRowMinimumHeight(4,400); grid_run_control->setRowMinimumHeight(7,300);
grid_run_control->addWidget(lab_run_crtl, 0,0,1,3,Qt::AlignTop); grid_run_control->addWidget(lab_run_crtl, 0,0,1,3,Qt::AlignTop);
...@@ -150,7 +150,7 @@ AutoCell::AutoCell(QWidget* parent):QWidget(parent) ...@@ -150,7 +150,7 @@ AutoCell::AutoCell(QWidget* parent):QWidget(parent)
spin_time_step->setFixedWidth(70); spin_time_step->setFixedWidth(70);
spin_time_step->setValue(1000); spin_time_step->setValue(1000);
spin_time_step->setRange(500,2500); spin_time_step->setRange(500,2500);
connect(spin_time_step, SIGNAL(valueChanged(int)), this, SLOT(changeDelai(int))); connect(spin_time_step, SIGNAL(valueChanged()), this, SLOT(changeDelai()));
button_prev = new QPushButton("<<"); button_prev = new QPushButton("<<");
button_prev->setStyleSheet("background-color: rgb(255,255,255)"); button_prev->setStyleSheet("background-color: rgb(255,255,255)");
button_prev->setFixedSize(40,40); button_prev->setFixedSize(40,40);
...@@ -167,13 +167,31 @@ AutoCell::AutoCell(QWidget* parent):QWidget(parent) ...@@ -167,13 +167,31 @@ AutoCell::AutoCell(QWidget* parent):QWidget(parent)
button_reinitialiser->setStyleSheet("background-color: rgb(255,255,255)"); button_reinitialiser->setStyleSheet("background-color: rgb(255,255,255)");
button_reinitialiser->setFixedWidth(200); button_reinitialiser->setFixedWidth(200);
grid_run_control->addWidget(matriceTorique, 1, 0, 1, 2); lab_nb_step = new QLabel("Nombre d'étapes : ");
edit_nb_step = new QLineEdit;
edit_nb_step->setReadOnly(true);
edit_nb_step->setFixedWidth(30);
edit_nb_step->setText("0");
edit_nb_step->setStyleSheet("background-color: rgb(255,255,255)");
lab_periode = new QLabel("Période observée : ");
edit_periode = new QLineEdit;
edit_periode->setReadOnly(true);
edit_periode->setFixedWidth(30);
edit_periode->setText("0");
edit_periode->setStyleSheet("background-color: rgb(255,255,255)");
grid_run_control->addWidget(matriceTorique, 1, 0, Qt::AlignCenter);
grid_run_control->addWidget(lab_time_step, 2, 0); grid_run_control->addWidget(lab_time_step, 2, 0);
grid_run_control->addWidget(spin_time_step, 2, 1); grid_run_control->addWidget(spin_time_step, 2, 1);
grid_run_control->addWidget(button_prev, 3, 0); grid_run_control->addWidget(button_prev, 3, 0);
grid_run_control->addWidget(button_run, 3, 1); grid_run_control->addWidget(button_run, 3, 1);
grid_run_control->addWidget(button_next, 3, 2); grid_run_control->addWidget(button_next, 3, 2);
grid_run_control->addWidget(button_reinitialiser, 4, 0, Qt::AlignCenter); grid_run_control->addWidget(button_reinitialiser, 4, 0, Qt::AlignTop);
grid_run_control->addWidget(lab_nb_step, 5,0);
grid_run_control->addWidget(edit_nb_step, 5,1);
grid_run_control->addWidget(lab_periode,6,0);
grid_run_control->addWidget(edit_periode,6,1);
lab_sauv_grille = new QLabel("Sauvegarder la grille courante"); lab_sauv_grille = new QLabel("Sauvegarder la grille courante");
edit_nom_grille = new QLineEdit; edit_nom_grille = new QLineEdit;
...@@ -186,9 +204,9 @@ AutoCell::AutoCell(QWidget* parent):QWidget(parent) ...@@ -186,9 +204,9 @@ AutoCell::AutoCell(QWidget* parent):QWidget(parent)
button_save_grid->setFixedWidth(90); button_save_grid->setFixedWidth(90);
connect(button_save_grid,SIGNAL(clicked()),this,SLOT(sauvegarderGrille())); connect(button_save_grid,SIGNAL(clicked()),this,SLOT(sauvegarderGrille()));
grid_run_control->addWidget(lab_sauv_grille,4,0,1,3, Qt::AlignBottom); grid_run_control->addWidget(lab_sauv_grille,7,0,1,3, Qt::AlignBottom);
grid_run_control->addWidget(edit_nom_grille,5,0, Qt::AlignBottom); grid_run_control->addWidget(edit_nom_grille,8,0, Qt::AlignBottom);
grid_run_control->addWidget(button_save_grid,5,2,Qt::AlignBottom); grid_run_control->addWidget(button_save_grid,8,2,Qt::AlignBottom);
general->addWidget(win_run_ctrl,1,0,2,1); general->addWidget(win_run_ctrl,1,0,2,1);
...@@ -197,16 +215,6 @@ AutoCell::AutoCell(QWidget* parent):QWidget(parent) ...@@ -197,16 +215,6 @@ AutoCell::AutoCell(QWidget* parent):QWidget(parent)
win_grid = new QWidget; win_grid = new QWidget;
grid = new QTableWidget(0,0,win_grid); grid = new QTableWidget(0,0,win_grid);
//notice
win_notice = new QWidget;
win_notice->setStyleSheet("background-color: rgb(204, 209, 209)");
win_notice->setMaximumWidth(300);
win_notice->setMinimumWidth(200);
lab_notice = new QLabel("Notice :", win_notice);
general->addWidget(win_notice,0,2,3,1);
}; };
void AutoCell::afficherGrille(Reseau* grille) void AutoCell::afficherGrille(Reseau* grille)
...@@ -261,6 +269,9 @@ void AutoCell::afficherGrille(Reseau* grille) ...@@ -261,6 +269,9 @@ void AutoCell::afficherGrille(Reseau* grille)
} }
connect(grid,SIGNAL(clicked(const QModelIndex&)),this,SLOT(modifierCellule(const QModelIndex&))); connect(grid,SIGNAL(clicked(const QModelIndex&)),this,SLOT(modifierCellule(const QModelIndex&)));
general->addWidget(win_grid,1,1,2,2); general->addWidget(win_grid,1,1,2,2);
edit_nb_step->setText(to_string(Automate::getInstance().getNbStep()).c_str());
edit_periode->setText(to_string(Automate::getInstance().getNbCycle()).c_str());
}; };
...@@ -298,9 +309,6 @@ void AutoCell::initialiserGrille(){ ...@@ -298,9 +309,6 @@ void AutoCell::initialiserGrille(){
edit_hauteur->setText(str_hauteur.setNum(grille.getHauteur(),10)); edit_hauteur->setText(str_hauteur.setNum(grille.getHauteur(),10));
} }
//réinitialiser l'automate
Automate::getInstance().reset();
this->afficherGrille(&grille); this->afficherGrille(&grille);
Automate::getInstance().setReseauInit(grille); Automate::getInstance().setReseauInit(grille);
Automate::getInstance().initialiserBuffer(); Automate::getInstance().initialiserBuffer();
...@@ -310,6 +318,8 @@ void AutoCell::RAZ(){ ...@@ -310,6 +318,8 @@ void AutoCell::RAZ(){
grid = new QTableWidget(0,0,win_grid); grid = new QTableWidget(0,0,win_grid);
edit_largeur->setText(""); edit_largeur->setText("");
edit_hauteur->setText(""); edit_hauteur->setText("");
edit_nb_step->setText("0");
edit_periode->setText("0");
spin_time_step->setValue(1000); spin_time_step->setValue(1000);
check_aleatoire->setCheckState(Qt::Unchecked); check_aleatoire->setCheckState(Qt::Unchecked);
check_load_grid->setCheckState(Qt::Unchecked); check_load_grid->setCheckState(Qt::Unchecked);
...@@ -407,8 +417,8 @@ void AutoCell::initAutomate(const QString& name) { ...@@ -407,8 +417,8 @@ void AutoCell::initAutomate(const QString& name) {
matriceTorique->setCheckState(Qt::Checked); matriceTorique->setCheckState(Qt::Checked);
} }
void AutoCell::changeDelai(int i) { void AutoCell::changeDelai() {
Automate::getInstance().setDelai(static_cast<unsigned int>(i)); Automate::getInstance().setDelai(static_cast<unsigned int>(spin_time_step->value()));
} }
void AutoCell::next() { void AutoCell::next() {
......
...@@ -204,8 +204,6 @@ RegleVoisinage* Database::getRegleVoisinage(const QString& name) const { ...@@ -204,8 +204,6 @@ RegleVoisinage* Database::getRegleVoisinage(const QString& name) const {
query.bindValue(":id", name); query.bindValue(":id", name);
query.exec(); query.exec();
regle->setNbVoisins(query.value(0).toUInt());
return regle; return regle;
} }
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#include <Automate.h> #include <Automate.h>
#include <parametragemodele.h> #include <parametragemodele.h>
ParamAlpha::ParamAlpha(const int nbEtats): QWidget(), nb(nbEtats) { ParamAlpha::ParamAlpha(const int nbEtats, const QWidget *parent): QWidget(), nb(nbEtats) {
this->setWindowTitle("Configuration des états"); this->setWindowTitle("Configuration des états");
this->setMinimumSize(900, 700); this->setMinimumSize(900, 700);
...@@ -28,6 +28,10 @@ ParamAlpha::ParamAlpha(const int nbEtats): QWidget(), nb(nbEtats) { ...@@ -28,6 +28,10 @@ ParamAlpha::ParamAlpha(const int nbEtats): QWidget(), nb(nbEtats) {
form[i]->addRow("Vert:", green[i]); form[i]->addRow("Vert:", green[i]);
form[i]->addRow("Bleu:", blue[i]); form[i]->addRow("Bleu:", blue[i]);
} }
<<<<<<< HEAD
=======
connect(valider, SIGNAL(clicked()), parent, SLOT(changerRegle()));
>>>>>>> 79d70f004b9e06f9113a2a1d2873a97e332be23d
connect(valider, SIGNAL(clicked()), this, SLOT(valide())); connect(valider, SIGNAL(clicked()), this, SLOT(valide()));
......
...@@ -77,12 +77,16 @@ NouveauModele::NouveauModele(QWidget* parent) : QWidget() { ...@@ -77,12 +77,16 @@ NouveauModele::NouveauModele(QWidget* parent) : QWidget() {
layoutEtat->addWidget(etat); layoutEtat->addWidget(etat);
layoutEtat->addWidget(nb_etats); layoutEtat->addWidget(nb_etats);
<<<<<<< HEAD
valider_Etat = new QPushButton("Valider le nombre d'états"); valider_Etat = new QPushButton("Valider le nombre d'états");
=======
connect