Impossible de changer une valeur avec les signaux et les slots
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)
Code:
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();
} |
Puis la classe
Code:
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;
}; |
Code:
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 ();
} |
Les lignes "importantes" dans le main:
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 :hola:
Bonne nuit :mur: