Bonjour,
Je débute Qt depuis peu et là je suis soumis çà un problème que je n'arrive pas du tout à résoudre. J'ai déjà regardé sur la FAQ, rien à y faire.
Le projet est le suivant :
je crée une fenêtre avec des onglets.
Dans le premier il y a un QComboBox,
Et dans le deuxième onglet, je veux faire apparaitre une image qui dépend de l'item choisi.
Je connecte le choix de l'item avec un SLOT (que j'ai créé) qui me sort le chemin de l'image à enregistré, là tout va bien.
Sauf que l'image ne s'affiche pas !!!!
je pense que c'est lié au faite que le programme est lue une seule fois et que les SIGNAL/SLOT ne modifient que des infimes parties de ceux-ci(seul les parties qui ont été prévus pour le changement)
OU
peut-être que si dans mon SLOT je pouvais avoir accès à l'instance de ma classe "mère" QWidget, je pourrais directement modifier celle-ci.
Bref je suis un peu perdu, et j'espère que vous comprenez ma problématique.
Assez bavardé, voici le code en version simplifier
La classe QSSCheckBox me sert à créer des SLOT/SiGNAL pour autre chose aussi.(je sais que le nom est pas TOP mais bon)
Puis la classe
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
58
59
60
61
62
63
64
65
66
67 //Le main.cpp int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget fenetre; // 1 : Créer le QTabWidget QTabWidget *onglets = new QTabWidget(&fenetre); onglets->setGeometry(30, 20, 320, 200); // 2 : Créer les pages, en utilisant un widget parent pour contenir chacune des pages QWidget *page1 = new QWidget; QWidget *page3 = new QWidget; // 3 : Créer le contenu des pages de widgets // Page 1 QLineEdit *m_nomPerso = new QLineEdit("Entrez votre nom"); QComboBox *m_type = new QComboBox(); m_type->addItem(".............."); m_type->addItem("Guerrier"); m_type->addItem("Mage"); QVBoxLayout *vbox1 = new QVBoxLayout; vbox1->addWidget(m_nomPerso); vbox1->addWidget(m_type); page1->setLayout(vbox1); // Page 3 QSSCheckBox *aaa = new QSSCheckBox; QObject::connect(m_type,SIGNAL(activated (QString)),aaa,SLOT(immagePerso(QString))); QLabel *avatar = new QLabel; avatar->setPixmap(aaa->getNomImage()); avatar->setAlignment(Qt::AlignCenter); QPushButton *boutonpret = new QPushButton("Prêt"); QVBoxLayout *finpage3 = new QVBoxLayout; finpage3->addWidget(avatar); finpage3->addWidget(boutonpret); page3->setLayout(finpage3); // 4 : ajouter les onglets au QTabWidget, en indiquant la page qu'ils contiennent onglets->addTab(page1, "Perso"); onglets->addTab(page3, "Image"); //QObject::connect(aaa,SIGNAL(changeFenetre ()),page3,SLOT(show())); QObject::connect(boutonpret,SIGNAL(pressed()),qApp,SLOT(quit())); fenetre.show(); return app.exec(); }
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 // Le header class QSSCheckBox : public QCheckBox { Q_OBJECT public: explicit QSSCheckBox(QWidget *parent = 0); QString getNomImage () const ; signals: void changeFenetre() const; public slots: void immagePerso (QString); private : QString m_nomImage; };Les lignes "importantes" dans le main:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 // Le cpp void QSSCheckBox::immagePerso (QString nomImage) { m_nomImage.clear(); m_nomImage = "imagesPerso/" + nomImage + ".jpg"; emit changeFenetre (); }
49 : connexion,
59 : commentaire car marche pas
Voili voilou
J'espère avoir été assez claire, je n'hésiterais pas à reformuler mes propos.
Merci pour votre aide
Bonne nuit
Partager