Bonjour,
Une fois de plus je viens vous demandez votre aide précieuse car je bloque.
Dans mon programme j'ai un QLCDNumber qui s'incrémente et se décrémente à l'aide de deux boutons "+" et "-". Et un bouton "Add" qui permettais jusque la de créer un nombre de (nouveaux) boutons équivalent a la valeur du LCD.
Les boutons créer bénéficie d'un nom différent grave a un slots "create fonction" qui fonctionne comme ceci.
Mon but est de pouvoir créer une classe dans laquelle il y a deux boutons et une QCombobox (voire plus) qui seront créer a chaque clic du bouton "Add" et qui créera autant d'object que la valeur du QLCD. Mais surtout que le nom de mon premier bouton puisse s'incrementer comme avec la methode create buttons.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void MaFenetre::createbutton() { for(int i = count; i < count + m_lcd->value(); i++){ QPushButton *m_button = new QPushButton(tr("video %1").arg(i+1)); m_layout->addWidget(m_button); } count += m_lcd->value(); }
Je vous mets dessous les code de MaFenetre et de Video seulement.
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 #ifndef MAFENETRE_H #define MAFENETRE_H #include <QApplication> #include <QWidget> #include <QtWidgets> #include <QPushButton> #include <QLCDNumber> #include <QGridLayout> #include <QHBoxLayout> #include <QVBoxLayout> #include "MyLCD.h" #include "Video.h" class MaFenetre : public QWidget // On hérite de QWidget (IMPORTANT) { Q_OBJECT public: MaFenetre(); public slots: void createbutton(); private: QPushButton *m_minusbutton; QPushButton *m_plusbutton; QPushButton *m_addbuttonListener; QHBoxLayout *m_toplayout; QVBoxLayout *m_principallayout; QVBoxLayout *m_layout; MyLCD *m_lcd; Video *m_video; int count; }; #endif // MAFENETRE_H
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 #include "MaFenetre.h" #include <iostream> using namespace std; MaFenetre::MaFenetre() : QWidget() { // Construction des boutons m_minusbutton = new QPushButton("-", this); m_lcd = new MyLCD(); m_plusbutton = new QPushButton("+", this); m_addbuttonListener = new QPushButton("add", this); // Création des layouts // Layout menu m_toplayout = new QHBoxLayout; m_toplayout->addWidget(m_minusbutton); m_toplayout->addWidget(m_lcd); m_toplayout->addWidget(m_plusbutton); m_toplayout->addWidget(m_addbuttonListener); // Layout bouton "video" m_layout = new QVBoxLayout; // Layout principal m_principallayout = new QVBoxLayout; m_principallayout->addLayout(m_toplayout); m_principallayout->addLayout(m_layout); setLayout(m_principallayout); QWidget::connect(m_minusbutton, SIGNAL(clicked()), m_lcd, SLOT(decrement())); QWidget::connect(m_plusbutton, SIGNAL(clicked()), m_lcd, SLOT(increment())); QWidget::connect(m_addbuttonListener, SIGNAL(clicked()), this, SLOT(createbutton())); } // Méthode creation des boutons "video" void MaFenetre::createbutton() { for(int i = count; i < count + m_lcd->value(); i++){ Video *m_video = new Video(count); m_layout->addWidget(m_video); } count += m_lcd->value(); }
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
30
31
32
33
34
35
36
37
38
39 #ifndef VIDEO_H #define VIDEO_H #include <QApplication> #include <QWidget> #include <QHBoxLayout> #include <QPushButton> #include <QComboBox> #include <QGridLayout> #include <QFileDialog> #include "MyLCD.h" class Video : public QWidget // On hérite de QWidget (IMPORTANT) { Q_OBJECT public: Video(QWidget* parent=0); Video(int videoname); private: QPushButton *m_buttonvideo; QPushButton *m_buttonload; QHBoxLayout *m_buttonvideolayout; QComboBox *m_midinotelist; int m_videoname; int count; //int count; }; #endif // VIDEO_HIci le probléme est que si je veux des boutons video qui se suivent video 1, video 2, video 3 etc.. je dois les créer un par un, forcement si j'en créé deux d'un coup ils porteront le même nom c'est à dire "video 1". Comment puis je faire pour que l'incrémentation du nom de mes boutons s'effectue correctement au seins de leur classe vidéo, alors que les valeur du LCD sont dans une autre classe. il y a t'il moyen de communiquer entre classe ? je suppose que oui, mais je ne trouve pas comment faire correctement.
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
30
31
32
33
34
35
36
37
38
39
40
41 #include "Video.h" #include <iostream> using namespace std; Video::Video(QWidget* parent) : QWidget(parent) { } Video::Video(int videoname) : m_videoname(videoname) { // Construction des boutons m_buttonvideo = new QPushButton(tr("video %1").arg(videoname+1)); m_buttonload = new QPushButton("Load"); m_midinotelist= new QComboBox(); m_midinotelist->addItem("C1"); m_midinotelist->addItem("C2"); m_midinotelist->addItem("C3"); m_midinotelist->addItem("C4"); QString dossier = QFileDialog::getExistingDirectory(this); // Création des layouts m_buttonvideolayout = new QHBoxLayout; m_buttonvideolayout->addWidget(m_buttonvideo); m_buttonvideolayout->addWidget(m_buttonload); //m_buttonvideolayout->addWidget(m_midinotelist,1,0); setLayout(m_buttonvideolayout); }
Merci d'avance pour votre aide
Partager