IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Case à cocher de désactivation dans un QTableWidget

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Laboratoire
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Laboratoire

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Par défaut Case à cocher de désactivation dans un QTableWidget
    Bonjour à toutes et à tous,

    Je suis nouveau sur ce forum et débutant en programmation QT. Je suis à la recherche d'une âme charitable capable de m'apporter ses lumières sur un petit souci que je rencontre dans la réalisation d'un programme d'encodage.

    J'ai passé des heures à écumer le web à la recherche d'une solution mais rien n'y a fait.

    J'ai créer une fenêtre, une série d'onglet et dans l'un d'eux, un QTableWidget. (tout cela dans Qt designer).

    L'un de mes objectifs était d'inclure des Widget de type combobox, checkbox et pushbutton dans les cellules de certaines colonne.

    Pour ce faire j'ai inclu mes widgets dans mon header de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     QList<QPointer<QComboBox> > combo;
    J'ai ensuite appelé ce widget dans mon cpp de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        QPointer<QComboBox> encodeur = new QComboBox (this); // ComboBox d'encodeur
        {
        encodeur->setEditable(true);
     
        QStringList personne;
        personne << ""
     
        encodeur->addItems(personne);
     
        combo.append(encodeur);
        }
    J'insère ensuite le widget ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        const int ligne = ui ->tableWidget->rowCount();
        ui->tableWidget->verticalHeader()->setVisible(false);
        ui->tableWidget->insertRow(ligne);
        ui->tableWidget->setCellWidget(ligne, 2, encodeur);

    J'ai fais ainsi pour chaque widget et voici ce que cela donne :
    Nom : essai1.png
Affichages : 751
Taille : 69,3 Ko

    Mon objectif actuel est de faire en sorte que lorsque la checkbox est cochée, toute les cellules de cette ligne soit "désactivée", "figée", bref qu'elles ne soient plus modifiable après avoir été remplie. (un objectif future serra aussi que lorsque la checkbox serra cochée, la ligne serra copiée dans un fichier txt de sauvegarde...)

    Et c'est la que ça coince. Je vois assez bien comment y parvenir dans l'absolu mais le fait que mes widget soient dans des cellules compléxifie pas mal l'affaire apparement.

    j'ai essayé ce genre de chose mais rien n'y fait, mes Combobox ne sont pas reconnue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     void MainWindow::on_validation_clicked()
                   {
                      encodeur->setEnable (false);
                    }
    J'ai également essayé de modifier l'appel de mes widget mais ils n'apparaissent plus dans les cellules du-coup.

    Quelqu'un saurait t'il m'aider et m'expliquer?

    Merci d'avance

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 150
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Qu'entendez vous par pas reconnue ? Erreur de compilation ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Candidat au Club
    Homme Profil pro
    Laboratoire
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Laboratoire

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Par défaut
    La compilation se fait sans soucis mais lorsque je clique sur la checkbox ou un bouton, rien ne se passe. J'ai l'impression que le slot que j'ai créé n'est pas reconnu et n'entraine donc aucune action quand je clique.

    Je suis parvenu à contourner mon problème en utilisant les slots hérité de certain widget.

    je suis donc parvenu à ce que je voulais faire à l'aide de ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QObject::connect(validation , SIGNAL(clicked(bool)), encodeur , SLOT(setEnabled(bool)));
    Néanmoins mon souci n'est pas résolu à 100% vu que je ne comprend pas pourquoi les slots que je crée ne fonctionne pas quand je les inclus dans un widget contenu dans une cellule d'une tablewidget.

    Pour créer un slot je procède comme suit:


    1) j'inscris en dessous de public slots dans mon header:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void setEnabled (bool);
    2) j'inscris à la fin de mon cpp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void setEnabled (bool)
    {
        setEnabled (false);
    }

    3) ensuite je fait l'appelle du slot créé a l'endroit nécessaire dans mon code ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        QObject::connect(validation , SIGNAL(clicked()), encodeur , SLOT(setEnabled (bool)));
    Mais rien de tout cela ne fonctionne.

    L'endroit ou j'appelle mon slot se trouve dans:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int i =0; i< 1; ++i){.........}
    Je ne sai pas si cela joue mais en tout cas, si j'essaye d'appeler un slot en dehors de cette zone, mon widget n'est plus reconnu. (et dans ce cas ci, j'entends par la que la compilation refuse de se faire car le widget ne serait "pas déclaré").

    Merci pour votre réponse et votre attention.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 150
    Billets dans le blog
    150
    Par défaut
    J'ai l'impression que le slot que j'ai créé n'est pas reconnu et n'entraine donc aucune action quand je clique.
    Si tel était le cas, cela serait indiqué dans la console de Qt Creator.

    1) j'inscris en dessous de public slots dans mon header:
    Ensuite, il faut relancer qmake (et votre classe hérite bien d'une classe Qt et elle possède bien la macro Q_OBJECT ?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int i =0; i< 1; ++i){.........}
    Vu cette boucle, il faut surement un QSignalMapper (bon, là, vous n'avez qu'un élément, donc ça aurait pu aller).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Candidat au Club
    Homme Profil pro
    Laboratoire
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Laboratoire

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Par défaut
    En fait, le nœud de mon problème est que tout les widgets déclaré dans la partie "ui":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    .
    .//ici
    .
    }
    me sont renseignés comme des variables non déclarées lors de la compilation quand je les appelles dans des fonction tel que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     void MainWindow::on_validation_clicked()
                   {
                      encodeur->setEnable (false); //c'est ici que le compilateur me bloque
                    }
    où donc dans ce cas ci, encodeur est un widget que j'ai déclaré dans la partie ui.

    Je coince toujours là dessus pour le moment et c'est assez énervant.

    Je ne connais pas bien le principe et le fonctionnement du QMapping. Pourriez vous m'expliquer et me montrer en gros comment cela fonctionne??

    Merci d'avance.

Discussions similaires

  1. [AC-2007] Case à cocher et résultats dans txtbox de formulaire
    Par Razorback dans le forum IHM
    Réponses: 4
    Dernier message: 13/08/2009, 10h14
  2. Ajouter une case à cocher par ligne dans mon tableau
    Par beegees dans le forum Langage
    Réponses: 4
    Dernier message: 02/11/2008, 10h30
  3. Utilisation de case à cocher avec VB6 dans Datagrid
    Par seyiv dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/05/2007, 15h11
  4. [Conception] formulaire et case à cocher et recherche dans une base de donnée
    Par olivier_1970 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 25/06/2006, 01h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo