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 :

QTableWidget de taille dynamique

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 12
    Points
    12
    Par défaut QTableWidget de taille dynamique
    Bonjour

    Je veux dans un QTableWidget controler le contenue des valeurs tapés dans les cellules d'une certaine collonne (pour permettre uniquement les numéros).
    Apparemment ce n'est pas possible de réaliser ce contrôle sur les QTableWidgetItem
    Donc je suis obligé de passer par les QLineEdit (visiblement moche ) et là il apparait un autre problème quand la QTableWidget à une taille dynamique.
    je veux récupéré le QLineEdit avec la fonction cellWidget() mais je reçois un objet de type QWidget et non QLineEdit et du coup je ne peux pas utiliser la fonction setValidator() pour réaliser mon contrôle

    Est-ce qu'il y a une manière d'appliquer des QValidator sur les QTableWidgetItem ?
    Est-ce qu'il faut convertir le QWidget retourner par cellWidget() en QLineEdit (Comment ?) ou alors qu'est qu'il faut faire ?

    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 <QApplication>
    #include <QTableWidget>
    #include <QLineEdit>
    #include <QTableWidgetItem>
    #include <QStringList>
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
     
        int tailleDynamique = 5; // example la taille d'un tableau dans une BDD
     
        QTableWidget table(tailleDynamique, 3);
     
        QString nom, prenom;
     
        int rowTable=0;
        for (int i=0; i<tailleDynamique; i++){
     
            nom = "aaa" + QString::number(rowTable);
            prenom = "bbb" + QString::number(rowTable);
     
            table.setItem(rowTable, 0, new QTableWidgetItem(nom));
            table.setItem(rowTable, 1, new QTableWidgetItem(prenom));
            table.setCellWidget(rowTable, 2, new QLineEdit);
     
            // Modifications des propriétés de QLineEdit
     
            // setStyleSheet fonction de QWidget : ça marche.
            table.cellWidget(rowTable, 2)->setStyleSheet("border: 1px solid red");
            // setValidator fonction de QLineEdit: ERROR.
            //table.cellWidget(rowTable, 2)->setValidator(new QDoubleValidator);
     
            rowTable++;
        }
     
        table.show();
     
        return a.exec();
    }
    (résultat dans la pièce jointe)
    Images attachées Images attachées  

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 438
    Points
    2 438
    Par défaut
    Bonjour.

    Ce que tu peux faire c'est créer le QLineEdit avant, y appliquer le validator, puis le mettre dans le tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            QDoubleValidator *validator = new QDoubleValidator(/*les valeurs*/);
            QLineEdit *lineEdit = new QLineEdit;
            lineEdit->setValidator(validator);
            table.setCellWidget(rowTable, 2, lineEdit);
    Sinon, pour le rajouter après, oui tu aurais été obligé de convertir le widget avec un [/codeinline]dynamic_cast<>[/codeinline].
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Merci,

    Voila le nouveau code et ça marche :

    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
     
    #include <QApplication>
    #include <QTableWidget>
    #include <QLineEdit>
    #include <QTableWidgetItem>
    #include <QStringList>
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
     
        int tailleDynamique = 5; // example la taille d'un tableau dans une BDD
     
        QTableWidget table(tailleDynamique, 3);
     
        QString nom, prenom;
     
        int rowTable=0;
        for (int i=0; i<tailleDynamique; i++){
     
            nom = "aaa" + QString::number(rowTable);
            prenom = "bbb" + QString::number(rowTable);
     
            table.setItem(rowTable, 0, new QTableWidgetItem(nom));
            table.setItem(rowTable, 1, new QTableWidgetItem(prenom));
     
            QLineEdit *lineEdit = new QLineEdit;
            lineEdit->setValidator(new QDoubleValidator(lineEdit));
            table.setCellWidget(rowTable, 2, lineEdit);
     
            table.cellWidget(rowTable, 2)->setStyleSheet("border: 1px solid red");
     
            rowTable++;
        }
     
        table.show();
     
        return a.exec();
    }
    Mais là je suis à l’intérieure d'une boucle, ce que je ne comprends pas ici c'est pourquoi je n’obtiens pas une erreur du genre :
    redeclaration of 'QLineEdit* lineEdit' ????

  4. #4
    Rédacteur/Modérateur
    Avatar de arnolddumas
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Autriche

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 978
    Points : 7 764
    Points
    7 764
    Par défaut
    Et pourquoi t'attends-tu à une telle erreur ? La variable lineEdit est locale à la boucle, ce qu'elle pointe n'est l'est pas par contre.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par arnolddumas Voir le message
    Et pourquoi t'attends-tu à une telle erreur ? La variable lineEdit est locale à la boucle, ce qu'elle pointe n'est l'est pas par contre.
    Merci là je dois réviser mes cours de C++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Iframe][Débutant]Iframe et taille dynamique
    Par mavina dans le forum Général JavaScript
    Réponses: 26
    Dernier message: 10/05/2006, 11h15
  2. div non superposés et de taille dynamique
    Par ibtisss dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/04/2006, 11h56
  3. [HTML] DIV avec taille dynamique ?
    Par graphicsxp dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 23/02/2006, 15h42
  4. taille dynamique des cases dans état
    Par exter666 dans le forum Access
    Réponses: 14
    Dernier message: 09/09/2005, 15h30
  5. [JTABLE] taille dynamique = F°(String.length)
    Par tripop dans le forum Composants
    Réponses: 15
    Dernier message: 13/01/2005, 17h07

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