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 :

Copier-coller et QTableWidget

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 264
    Par défaut Copier-coller et QTableWidget
    Bonsoir,

    Je cherche à faire un copier-coller à partir d'un QTableWidget.

    J'ai deux SLOTs appelés à partir de mon menu

    voici mon code posant problème:

    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
     
     
    ...
     
    // déclaration qtablewidget
    QTableWidget* tableau;
     
      tableau=new QTableWidget();
      tableau->setRowCount(10);
      tableau->setColumnCount(10);
      hboxlayout->addWidget(tableau);
     
    ...
     
    void copier()
    {
      QString texte=tableau->currentItem()->text();
      QClipboard *clipboard=QApplication::clipboard();
      clipboard->setText(texte);
    }
     
    void coller()
    {
      QClipboard *clipboard=QApplication::clipboard();
      QString texte=clipboard->text();
      char* str=texte.toLocal8Bit().data();
      printf("valeur de 'texte' dans fonction coller : %_n",str);
      tableau->currentItem()->setText(texte);
    }
    j'ai un segmentation fault lié à la ligne :tableau->currentItem()->setText(texte);
    si je la commente, ça fonctionne mais bien sûr sans faire de copie.

    Ca ne vient pas de la recup du contenu du clipboard j'ai ajouté les lignes
    char* str=texte.toLocal8Bit().data();
    printf("valeur de 'texte' dans fonction coller : %_n",str);
    pour vérifier la recup du clipboard.

    Je pense que àa vient du currentitem qui n'est plus valable car j'ai sélectionne une autre case avant de lancer le SLOT coller(), mais je ne comprend pas pourquoi.

    Info complémentaire si je ne change pas de cellule, et que je coller() est appelé : pas de plantage.

    Merci pour votre aide.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    On est retourné à l'âge de pierre pour ton log , tu peux faire aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <QDebug>
    qDebug() << "valeur de 'texte' dans fonction coller :" << texte;
    Tu peux en profiter pour rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qDebug() << "item courant :" << tableau->currentRow() << ";" << tableau->currentColumn();

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 264
    Par défaut l'age de pierre
    Bonjour Troudyl,

    ça va vachement me faire avancer ça ....

    En tout cas je balance une pierre sur ce p**** d'ordi j'aurais plus de probs ..
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 264
    Par défaut je coince toujours
    j'ai modifié ma fonction coller

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // avec usage de qdebug pour faire plaisir à troudyl ...
     
    Qclipboard *clipboard=QApplication::clipboard();
    QString texte=clipboard->text();
     
    QTableWidgetItem* item=new QTableWidgetItem();
    item->setText(texte);
    QDebug ()<<"qtablewidgetitem : "<<item->text(); // affiche "essai" le contnue de QClipboard
    qdebug ()<<tableau->currentItem : "<<tableau->currentItem(); // donne 0x0
    tableau->setCurrentItem(item);
    qdebug ()<<tableau->currentItem : "<<tableau->currentItem(); // donne toujours 0x0
    j'ai plus de segfault mais ça ne fonctionne pas. Pourquoi mon currentItem reste à 0x0 alors que j'ai fait un setCurrentItem dessus ?

    Merci pour votre aide.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Oui ça va te faire avancer, tu vas voir et comprendre tout seul plus de choses.

    Et je pense que si tu regardes le code de setCurrentItem() dans les sources de Qt, tu verras aussi (je le suppose car ça me parait logique) que tu ne peux pas choisir un item qui n'est pas dans le tableau sinon ça n'a pas de sens.

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 264
    Par défaut j'ai compris maintenant je cherche la solution
    Je pense avoir compris.

    voila ce que j'ai compris :
    Le qtablewidget peut être vu shematiquement comme un tableau ligne-colomnes contenant des objets qtablewidgetitems.

    Les cases contenant les qwidgetitems sont nulles ( non initialisés ) lors de la création du qtablewidget

    le fait de saisir du texte dans une case en étant dessus avec le clavier crée un qtablewidget rempli et met son adresse dans la case du "tableau" qtablewidget ou modifie son contenu si il y a déjà un qtablewidgetitem aux coordonnées

    Le fait d'appeler une case contenant un qtablewidget non initialisé provoque logiquement mon segfault.

    Pour solutionner mon prob, je pense préremplir mon tableau lors de sa création
    ( vu qu'il fait 10x10 ) j'ai testé le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    tableau=new QTableWidget();
    tableau->setRowCount(10);
    tableau->setColumnCount(10);
    for (boucle=1;boucle==5;boucle++)
    {
      item=new QTableWidgetItem();
      item->setText("a");
      tableau->setItem(1,boucle,item);
    }
    mon but est de remplir en partie une ligne de mon qtablewidget avec des a à des fins de tests.

    Ca ne fonctionne pas, je continue de chercher ..

    si qq1 peut m'éclairer j'aprécierais

    quand j'aurais réussi cela, je pourrais toujours tester si les coordonnées contiennent un qtablewidgetitem, et le créer si besoin, si il existe je modifierais seulement son contenu.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

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

Discussions similaires

  1. [QTableWidget] Couper-copier-coller et annuler
    Par Christophe dans le forum Contribuez
    Réponses: 0
    Dernier message: 11/05/2012, 11h09
  2. [Swing]copier coller... dans le menu.
    Par parksto dans le forum Composants
    Réponses: 3
    Dernier message: 10/05/2004, 22h56
  3. Copier coller Fichier windows
    Par KPitN dans le forum Windows
    Réponses: 8
    Dernier message: 20/04/2004, 17h32
  4. Copier Coller une ligne d'une table avec modif ?
    Par nolan76 dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/03/2004, 16h34
  5. [Débutant] Conserver la couleur lors d'un copier coller
    Par ADIDASman dans le forum JBuilder
    Réponses: 2
    Dernier message: 21/05/2003, 18h13

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