{Résolu} [QT] Afficher valeur sélectionnée dans un QLabel
Dernière réponse : dans Programmation
Bonjour (encore
)
Sur QT 4.3.2, j'ai un petit problème (pas bien méchant sans doute) très énervant.
Je m'explique.
Mon programme est composé d'une fenetre principale elle même composée de 4 onglets.
Lorsque je sélectionne une valeur du TreeView de l'onglet de la page2 par exemple, je voudrais que (après clic sur le bouton sélectionner) cette valeur s'affiche dans le labelorigine de la page4. Mais je ne parviens pas a récupérer cette valeur.
C'est pour un synchroniseur
voici mon code.
L'erreur me dit que elementSelectionne1 et elementSelectionne2 ne sont pas déclarés.
J'ai bien essayé de modifié ca mais je n'ai fait qu'empirer les choses...
Merci d'avance
) Sur QT 4.3.2, j'ai un petit problème (pas bien méchant sans doute) très énervant.
Je m'explique.
Mon programme est composé d'une fenetre principale elle même composée de 4 onglets.
Lorsque je sélectionne une valeur du TreeView de l'onglet de la page2 par exemple, je voudrais que (après clic sur le bouton sélectionner) cette valeur s'affiche dans le labelorigine de la page4. Mais je ne parviens pas a récupérer cette valeur.
C'est pour un synchroniseur
voici mon code.
#include "MaFenetre.h"
MaFenetre::MaFenetre() : QWidget()
{
setWindowTitle("S1kronize");
setWindowIcon(QIcon("MAGMA.png"));
//1 on crée le QTabWidget
QTabWidget *onglets = new QTabWidget(this);
onglets->setGeometry(0, 0, 400, 200);
//2 on crée les pages en utilisant un widget parent pour contenir chacune des pages
QWidget *page1 = new QWidget;
QWidget *page2 = new QWidget;
QWidget *page3 = new QWidget;
QWidget *page4 = new QWidget;
//3 on crée le contenu des pages de widgets
//page1
m_apropos = new QPushButton("A propos", this);
m_quitter = new QPushButton("Quitter", this);
QVBoxLayout *vbox1 = new QVBoxLayout;
vbox1->addWidget(m_apropos);
vbox1->addWidget(m_quitter);
QObject::connect(m_quitter, SIGNAL(clicked()), this, SLOT(ouvrir()));
QObject::connect(m_apropos, SIGNAL(clicked()), this, SLOT(propos()));
page1->setLayout(vbox1);
//page2
boutonSelect1 = new QPushButton("Sélectionner");
QVBoxLayout *vbox2 = new QVBoxLayout;
modele1 = new QDirModel;
vue1 = new QTreeView;
vue1->setModel(modele1);
vbox2->addWidget(vue1);
vbox2->addWidget(boutonSelect1);
QObject::connect(boutonSelect1, SIGNAL(clicked()), this, SLOT(afficher1()));
page2->setLayout(vbox2);
//page3
boutonSelect2 = new QPushButton("Sélectionner");
QVBoxLayout *vbox3 = new QVBoxLayout;
modele2 = new QDirModel;
vue2 = new QTreeView;
vue2->setModel(modele2);
vbox3->addWidget(vue2);
vbox3->addWidget(boutonSelect2);
QObject::connect(boutonSelect2, SIGNAL(clicked()), this, SLOT(afficher2()));
page3->setLayout(vbox3);
//page4
m_synchroniser = new QPushButton("SYNCHRONISER", this);
QVBoxLayout *vbox4 = new QVBoxLayout;
QLabel *origine = new QLabel(this);
QLabel *destination = new QLabel(this);
origine->setText("Elément d'origine sélectionné: " + elementSelectionne1 + "");
destination->setText("Elément de destination sélectionné: " + elementSelectionne2 + "");
vbox4->addWidget(origine);
vbox4->addWidget(destination);
vbox4->addWidget(m_synchroniser);
page4->setLayout(vbox4);
//4 on ajoute les onglets au QTabWidget en indiquant la page qu'ils contiennent
onglets->addTab(page1, "Accueil");
onglets->addTab(page2, "Dossier d'origine");
onglets->addTab(page3, "Dossier de destination");
onglets->addTab(page4, "SYNCHRONISER");
}
void MaFenetre::ouvrir()
{
int reponse = QMessageBox::warning(this, "Quitter", "Voulez-vous vraiment quitter?", QMessageBox::Yes | QMessageBox::No);
if (reponse == QMessageBox::Yes)
{
QObject::connect(m_oui, SIGNAL(clicked()), qApp, SLOT(quit()));
}
else if (reponse == QMessageBox::No)
{
}
}
void MaFenetre::propos()
{
QMessageBox::information(this, "A propos", "S1kronize a été développé par <strong>Tib</strong> <br /> à l'aide du <a href=\"<a href="http://www.siteduzero.com" target="_blank">http://www.siteduzero.com</a>\">Site du Zéro</a> \<br />Ce programme peut être librement partagé.");
}
void MaFenetre::afficher1()
{
QItemSelectionModel *selection1 = vue1->selectionModel();
QModelIndex indexElementSelectionne1 = selection1->currentIndex();
QVariant elementSelectionne1 = modele1->data(indexElementSelectionne1, Qt::DisplayRole);
QMessageBox::information(this, "Elément sélectionné", elementSelectionne1.toString());
}
void MaFenetre::afficher2()
{
QItemSelectionModel *selection2 = vue2->selectionModel();
QModelIndex indexElementSelectionne2 = selection2->currentIndex();
QVariant elementSelectionne2 = modele2->data(indexElementSelectionne2, Qt::DisplayRole);
QMessageBox::information(this, "Elément sélectionné", elementSelectionne2.toString());
}
L'erreur me dit que elementSelectionne1 et elementSelectionne2 ne sont pas déclarés.
J'ai bien essayé de modifié ca mais je n'ai fait qu'empirer les choses...
Merci d'avance
Autres pages sur : resolu afficher valeur selectionnee qlabel
Lassé par la pub ? Créez un compte
Salut, l'erreur exacte est:
MaFenetre.cpp:73: error: 'elementSelectionne1' undeclared (first use this function)
MaFenetre.cpp:73: error: (each undeclared identifier is reported only once for each function it appears in.)
MaFenetre.cpp:74: error: 'elementSelectionne2' undeclared (first use this function)
2 lignes d'erreur pour elementSelectionne1 et une seul pour elementSelectionne2 ?!?!
Voici le code de MaFenetre.h
Je ne vois vraiment pas la...
MaFenetre.cpp:73: error: 'elementSelectionne1' undeclared (first use this function)
MaFenetre.cpp:73: error: (each undeclared identifier is reported only once for each function it appears in.)
MaFenetre.cpp:74: error: 'elementSelectionne2' undeclared (first use this function)
2 lignes d'erreur pour elementSelectionne1 et une seul pour elementSelectionne2 ?!?!
Voici le code de MaFenetre.h
#ifndef DEF_MAFENETRE
#define DEF_MAFENETRE
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QMessageBox>
#include <QFileDialog>
#include <QIcon>
#include <QLabel>
#include <QDirModel>
#include <QListView>
#include <QVBoxLayout>
#include <QInputDialog>
#include <QtGui>
#include <QDialog>
#include <QTabWidget>
class MaFenetre : public QWidget // On hérite de QWidget (IMPORTANT)
{
Q_OBJECT
public:
MaFenetre();
public slots:
void afficher1();
void afficher2();
void ouvrir();
void propos();
private:
QPushButton *m_synchroniser;
QPushButton *m_apropos;
QPushButton *m_quitter;
QPushButton *m_oui;
QDirModel *modele1;
QTreeView *vue1;
QDirModel *modele2;
QTreeView *vue2;
QPushButton *boutonSelect1;
QPushButton *boutonSelect2;
QModelIndex *indexElementSelectionne1;
QModelIndex *indexElementSelectionne2;
QTabWidget *onglets;
};
#endif
Je ne vois vraiment pas la...
En fait j'ai confondu elementSelectionne1 et elementSelectionne2 avec respectivement indexElementSelectionne1 et indexElementSelectionne2... j'ai donc déclaré elementSelectionne1 et elementSelectionne2 en tant que QVariant dans MaFenetre.h et là, nouvelle erreur:
MaFenetre.cpp:73: error: invalid operands of types 'const char[20]' and 'QVariant*' to binary 'operator+'
MaFenetre.cpp:74: error: invalid operands of types 'const char[25]' and 'QVariant*' to binary 'operator+'
J'ai bien essayé elementSelectionne1->toString() et elementSelectionne1.toString(), mais ca ne fonctionne pas...et je sens qu'il s'agit d'une petite erreur bénigne mais ceux sont souvent celles la les plus dures a trouver...
MaFenetre.cpp:73: error: invalid operands of types 'const char[20]' and 'QVariant*' to binary 'operator+'
MaFenetre.cpp:74: error: invalid operands of types 'const char[25]' and 'QVariant*' to binary 'operator+'
J'ai bien essayé elementSelectionne1->toString() et elementSelectionne1.toString(), mais ca ne fonctionne pas...et je sens qu'il s'agit d'une petite erreur bénigne mais ceux sont souvent celles la les plus dures a trouver...
Je te poste dans l'ordre: le main.cpp, MaFenetre.h, MaFenetre.cpp:
La, le logiciel compile bien, mais...mon fichier.exe ne veut pas se lancer
A quoi cela peut-il être dû?
Merci
#include <QApplication>
#include <QTranslator>
#include <QLocale>
#include <QLibraryInfo>
#include "MaFenetre.h"
using namespace std;
void ouvrirdialogue();
void ouvrir();
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MaFenetre fenetre;
QString locale = QLocale::system().name();
QTranslator translator;
translator.load(QString("qt_") + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
app.installTranslator(&translator);
fenetre.show();
return app.exec();
}
#ifndef DEF_MAFENETRE
#define DEF_MAFENETRE
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QMessageBox>
#include <QFileDialog>
#include <QIcon>
#include <QLabel>
#include <QDirModel>
#include <QListView>
#include <QVBoxLayout>
#include <QInputDialog>
#include <QtGui>
#include <QDialog>
#include <QTabWidget>
class MaFenetre : public QWidget // On hérite de QWidget (IMPORTANT)
{
Q_OBJECT
public:
MaFenetre();
public slots:
void afficher1();
void afficher2();
void ouvrir();
void propos();
private:
QPushButton *m_synchroniser;
QPushButton *m_apropos;
QPushButton *m_quitter;
QPushButton *m_oui;
QDirModel *modele1;
QTreeView *vue1;
QDirModel *modele2;
QTreeView *vue2;
QPushButton *boutonSelect1;
QPushButton *boutonSelect2;
QModelIndex *indexElementSelectionne1;
QModelIndex *indexElementSelectionne2;
QVariant *elementSelectionne1;
QVariant *elementSelectionne2;
QTabWidget *onglets;
};
#endif
#include "MaFenetre.h"
using namespace std;
MaFenetre::MaFenetre() : QWidget()
{
setWindowTitle("S1kronize");
setWindowIcon(QIcon("MAGMA.png"));
//1 on crée le QTabWidget
QTabWidget *onglets = new QTabWidget(this);
onglets->setGeometry(0, 0, 500, 300);
//2 on crée les pages en utilisant un widget parent pour contenir chacune des pages
QWidget *page1 = new QWidget;
QWidget *page2 = new QWidget;
QWidget *page3 = new QWidget;
QWidget *page4 = new QWidget;
//3 on crée le contenu des pages de widgets
//page1
m_apropos = new QPushButton("A propos", this);
m_quitter = new QPushButton("Quitter", this);
QVBoxLayout *vbox1 = new QVBoxLayout;
QLabel *image = new QLabel(this);
image->setPixmap(QPixmap("synchro.png"));
vbox1->addWidget(image);
vbox1->addWidget(m_apropos);
vbox1->addWidget(m_quitter);
QObject::connect(m_quitter, SIGNAL(clicked()), this, SLOT(ouvrir()));
QObject::connect(m_apropos, SIGNAL(clicked()), this, SLOT(propos()));
page1->setLayout(vbox1);
//page2
boutonSelect1 = new QPushButton("Sélectionner");
QVBoxLayout *vbox2 = new QVBoxLayout;
modele1 = new QDirModel;
QLabel *fenorigine = new QLabel(this);
fenorigine->setText("Sélectionner le répertoire d'origine...");
vue1 = new QTreeView;
vue1->setModel(modele1);
vbox2->addWidget(fenorigine);
vbox2->addWidget(vue1);
vbox2->addWidget(boutonSelect1);
QObject::connect(boutonSelect1, SIGNAL(clicked()), this, SLOT(afficher1()));
page2->setLayout(vbox2);
//page3
boutonSelect2 = new QPushButton("Sélectionner");
QVBoxLayout *vbox3 = new QVBoxLayout;
modele2 = new QDirModel;
QLabel *fendest = new QLabel(this);
fendest->setText("Sélectionner le répertoire de destination...");
vue2 = new QTreeView;
vue2->setModel(modele2);
vbox3->addWidget(fendest);
vbox3->addWidget(vue2);
vbox3->addWidget(boutonSelect2);
QObject::connect(boutonSelect2, SIGNAL(clicked()), this, SLOT(afficher2()));
page3->setLayout(vbox3);
//page4
m_synchroniser = new QPushButton("SYNCHRONISER", this);
QVBoxLayout *vbox4 = new QVBoxLayout;
QLabel *origine = new QLabel(this);
QLabel *destination = new QLabel(this);
origine->setText("Elément d'origine: " + elementSelectionne1->toString());
destination->setText("Elément de destination: " + elementSelectionne2->toString());
vbox4->addWidget(origine);
vbox4->addWidget(destination);
vbox4->addWidget(m_synchroniser);
page4->setLayout(vbox4);
//4 on ajoute les onglets au QTabWidget en indiquant la page qu'ils contiennent
onglets->addTab(page1, "Accueil");
onglets->addTab(page2, "Dossier d'origine");
onglets->addTab(page3, "Dossier de destination");
onglets->addTab(page4, "SYNCHRONISER");
}
void MaFenetre::ouvrir()
{
int reponse = QMessageBox::warning(this, "Quitter", "Voulez-vous vraiment quitter?", QMessageBox::Yes | QMessageBox::No);
if (reponse == QMessageBox::Yes)
{
QObject::connect(m_oui, SIGNAL(clicked()), qApp, SLOT(quit()));
}
else if (reponse == QMessageBox::No)
{
}
}
void MaFenetre::propos()
{
QMessageBox::information(this, "A propos", "S1kronize a été développé par <strong>Tib</strong> à l'aide du <a href=\"<a href="http://www.siteduzero.com" target="_blank">http://www.siteduzero.com</a>\">Site du Zéro</a>.<br /> Ce programme s'utilise en parcourant les onglets de gauche à droite. <br />Peut être librement partagé.");
}
void MaFenetre::afficher1()
{
QItemSelectionModel *selection1 = vue1->selectionModel();
QModelIndex indexElementSelectionne1 = selection1->currentIndex();
QVariant elementSelectionne1 = modele1->data(indexElementSelectionne1, Qt::DisplayRole);
QMessageBox::information(this, "Elément sélectionné", elementSelectionne1.toString());
}
void MaFenetre::afficher2()
{
QItemSelectionModel *selection2 = vue2->selectionModel();
QModelIndex indexElementSelectionne2 = selection2->currentIndex();
QVariant elementSelectionne2 = modele2->data(indexElementSelectionne2, Qt::DisplayRole);
QMessageBox::information(this, "Elément sélectionné", elementSelectionne2.toString());
}
La, le logiciel compile bien, mais...mon fichier.exe ne veut pas se lancer
A quoi cela peut-il être dû?
Merci
Résolu...Voici comment j'ai procédé:
- au lieu de déclarer les labels dans MaFenetre.cpp je les ai déclaré dans MaFenetre.h (hé oui...)
- au lieu que APRES appel de la fonction afficher1 on affiche la valeur du label dans la page 4, j'ai fait en sorte que la fonction afficher1 renvoie aussi la valeur de l'élement selectionné dans le label origine.
Bref, voici le code:
Je voudrais maintenant récupérer le chemin entier du dossier sélectionné, je me suis renseigné mais je ne trouve pas de réponse...
une idée?
Merci CRicky pour le temps passé
- au lieu de déclarer les labels dans MaFenetre.cpp je les ai déclaré dans MaFenetre.h (hé oui...)
- au lieu que APRES appel de la fonction afficher1 on affiche la valeur du label dans la page 4, j'ai fait en sorte que la fonction afficher1 renvoie aussi la valeur de l'élement selectionné dans le label origine.
Bref, voici le code:
#include <string> #include "MaFenetre.h" using namespace std; MaFenetre::MaFenetre() : QWidget() { setWindowTitle("S1kronize"); setWindowIcon(QIcon("MAGMA.png")); //1 on crée le QTabWidget QTabWidget *onglets = new QTabWidget(this); onglets->setGeometry(0, 0, 500, 300); //2 on crée les pages en utilisant un widget parent pour contenir chacune des pages QWidget *page1 = new QWidget; QWidget *page2 = new QWidget; QWidget *page3 = new QWidget; QWidget *page4 = new QWidget; //3 on crée le contenu des pages de widgets //page1 m_apropos = new QPushButton("A propos", this); m_quitter = new QPushButton("Quitter", this); QVBoxLayout *vbox1 = new QVBoxLayout; QLabel *image = new QLabel(this); image->setPixmap(QPixmap("synchro.png")); vbox1->addWidget(image); vbox1->addWidget(m_apropos); vbox1->addWidget(m_quitter); QObject::connect(m_quitter, SIGNAL(clicked()), this, SLOT(ouvrir())); QObject::connect(m_apropos, SIGNAL(clicked()), this, SLOT(propos())); page1->setLayout(vbox1); //page2 boutonSelect1 = new QPushButton("Sélectionner"); QVBoxLayout *vbox2 = new QVBoxLayout; modele1 = new QDirModel; QLabel *fenorigine = new QLabel(this); fenorigine->setText("Sélectionner le répertoire d'origine..."); vue1 = new QTreeView; vue1->setModel(modele1); vbox2->addWidget(fenorigine); vbox2->addWidget(vue1); vbox2->addWidget(boutonSelect1); QObject::connect(boutonSelect1, SIGNAL(clicked()), this, SLOT(afficher1())); page2->setLayout(vbox2); //page3 boutonSelect2 = new QPushButton("Sélectionner"); QVBoxLayout *vbox3 = new QVBoxLayout; modele2 = new QDirModel; QLabel *fendest = new QLabel(this); fendest->setText("Sélectionner le répertoire de destination..."); vue2 = new QTreeView; vue2->setModel(modele2); vbox3->addWidget(fendest); vbox3->addWidget(vue2); vbox3->addWidget(boutonSelect2); QObject::connect(boutonSelect2, SIGNAL(clicked()), this, SLOT(afficher2())); page3->setLayout(vbox3); //page4 m_synchroniser = new QPushButton("SYNCHRONISER", this); QVBoxLayout *vbox4 = new QVBoxLayout; origine = new QLabel(this); destination = new QLabel(this); vbox4->addWidget(origine); vbox4->addWidget(destination); vbox4->addWidget(m_synchroniser); page4->setLayout(vbox4); //4 on ajoute les onglets au QTabWidget en indiquant la page qu'ils contiennent onglets->addTab(page1, "Accueil"); onglets->addTab(page2, "Dossier d'origine"); onglets->addTab(page3, "Dossier de destination"); onglets->addTab(page4, "SYNCHRONISER"); } void MaFenetre::ouvrir() { int reponse = QMessageBox::warning(this, "Quitter", "Voulez-vous vraiment quitter?", QMessageBox::Yes | QMessageBox::No); if (reponse == QMessageBox::Yes) { QObject::connect(m_oui, SIGNAL(clicked()), qApp, SLOT(quit())); } else if (reponse == QMessageBox::No) { } } void MaFenetre::propos() { QMessageBox::information(this, "A propos", "S1kronize a été développé par <strong>Tib</strong> à l'aide du <a href=\"<a href="http://www.siteduzero.com" target="_blank">http://www.siteduzero.com</a>\">Site du Zéro</a>.<br /> Ce programme s'utilise en parcourant les onglets de gauche à droite. <br />Peut être librement partagé."); } void MaFenetre::afficher1() { QItemSelectionModel *selection1 = vue1->selectionModel(); QModelIndex indexElementSelectionne1 = selection1->currentIndex(); QVariant elementSelectionne1 = modele1->data(indexElementSelectionne1, Qt::DisplayRole); QMessageBox::information(this, "Elément sélectionné", elementSelectionne1.toString()); origine->setText("Elément d'origine: " + elementSelectionne1.toString()); } void MaFenetre::afficher2() { QItemSelectionModel *selection2 = vue2->selectionModel(); QModelIndex indexElementSelectionne2 = selection2->currentIndex(); QVariant elementSelectionne2 = modele2->data(indexElementSelectionne2, Qt::DisplayRole); QMessageBox::information(this, "Elément sélectionné", elementSelectionne2.toString()); destination->setText("Elément de destination: " + elementSelectionne2.toString()); }
Je voudrais maintenant récupérer le chemin entier du dossier sélectionné, je me suis renseigné mais je ne trouve pas de réponse...
une idée?
Merci CRicky pour le temps passé
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumAfficher des valeur mysql dans un tableau
- ForumAfficher valeur entier en java
- ForumAfficher valeur variable php
- ForumNe pas afficher valeur excel
- ForumAfficher valeur variable c
- ForumExcel ne pas afficher valeur vide
- ForumAfficher valeur negative en excel
- solutionsQt afficher page web
- articlesExcel pas afficher valeur
- ForumPhp afficher valeur checkbox
- Voir plus