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 :

Insérer le contenu d'un QTextDocument dans un autre

  1. #1
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut Insérer le contenu d'un QTextDocument dans un autre
    Bonjour,

    J'aimerais transférer tout le contenu (blocs et ressources) d'un QTextDocument vers un autre. Quelqu'un a-t-il une idée ?

    Merci d'avance.

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 668
    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 : 17 668
    Points : 43 716
    Points
    43 716
    Par défaut insertion contenu qtextdocument dans un autre
    Qu'entend tu par ressources ? des images ? des objets ( ex: qlabel ) ?

    Pour des images, à mon avis ça ne pose pas de probs, vu que qTextEdit,après pour la manip d'objets, quel est le but ?

  3. #3
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Qu'entend tu par ressources ? des images ? des objets ( ex: qlabel ) ?
    Pour un QTextDocument, les ressources peuvent être de type image, feuille css, html ou autre (voir QTextDocument::ResourceType).
    Mais là, il n'y a pas trop de soucis car j'arrive quand même à récupérer puis insérer les images dans le second document.
    Le principale problème c'est la structure elle même qu'il faut reproduire ...

    Citation Envoyé par chrtophe Voir le message
    Pour des images, à mon avis ça ne pose pas de probs, vu que qTextEdit,après pour la manip d'objets, quel est le but ?
    Pas trop saisi la phrase/question !

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 668
    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 : 17 668
    Points : 43 716
    Points
    43 716
    Par défaut transfert bloc et ressources qtextdocument
    Je ne sais pas ce que tu entends par ressource

    voici un petit bout de code qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Qtextedit* texte=new QTextEdit;
    hboxlayout->addWidget(texte);
    texte->setHtml("<br><font color=blue>test<br><img src=:/image1.png>");
    QLabel* label=new QLabel("label 1",texte);
    QTextDocument* document=texte->document();
    QTextDocument* document2=texte->clone();
    QTextEdit* texte2=new QTextEdit();
    texte2->setDocument(document2);
    hboxlayout(addWidget(texte2));
    j'ai l'impression que tu ne peux pas cloner un objet tel quel ( j'entend par là duplication de l'objet avec duplication des objets enfants comme un fork )
    regardes ça :
    http://qt-project.org/faq/answer/how...clone_a_widget

    Dans le code ci-dessus, mes 2 QTextEdit s'affichent bien à l'écran, il n'y a pas label 1 dans le second. Mon QLabel fait partie du du QTextEdit et pas du QTextdocument je pense. Je ne sais pas si je peux mettre le QLabel dans le QTextDocument ( je présumes que ça doit être possible mais n'en suis pas sûr je vais essayer). Dans le QTextEdit, j'ai mis une image présente dans mes ressources, celle-ci s'affiche bien dans le second QTextEdit. Si c'est ça ton besoin ...

  5. #5
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Je ne sais pas ce que tu entends par ressource

    voici un petit bout de code qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Qtextedit* texte=new QTextEdit;
    hboxlayout->addWidget(texte);
    texte->setHtml("<br><font color=blue>test<br><img src=:/image1.png>");
    QLabel* label=new QLabel("label 1",texte);
    QTextDocument* document=texte->document();
    QTextDocument* document2=texte->clone();
    QTextEdit* texte2=new QTextEdit();
    texte2->setDocument(document2);
    hboxlayout(addWidget(texte2));
    j'ai l'impression que tu ne peux pas cloner un objet tel quel ( j'entend par là duplication de l'objet avec duplication des objets enfants comme un fork )
    regardes ça :
    http://qt-project.org/faq/answer/how...clone_a_widget

    Dans le code ci-dessus, mes 2 QTextEdit s'affichent bien à l'écran, il n'y a pas label 1 dans le second. Mon QLabel fait partie du du QTextEdit et pas du QTextdocument je pense. Je ne sais pas si je peux mettre le QLabel dans le QTextDocument ( je présumes que ça doit être possible mais n'en suis pas sûr je vais essayer). Dans le QTextEdit, j'ai mis une image présente dans mes ressources, celle-ci s'affiche bien dans le second QTextEdit. Si c'est ça ton besoin ...
    Bonjour,

    Désolé de ne pas avoir eu à réagir plutôt mais j'étais trop penché sur la résolution du problème (un peu urgent).
    Ce que tu proposes est bien un "clonage" du document lequel tu l'utilise ailleurs. Mais ce que je veux c'est reproduire la même structure d'un noeud d'un document A dans un noeud dans un document B.

    J'ai toutefois avancé sur mes recherches et je suis parvenu à un résultat acceptable (mais ... voir plus bas) et voici le code :
    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
     
            // QTextDocument ao_doc => document vers le quel le contenu sera copié
     
            QTextDocument richTextDocument; // Document dont le contenu sera recopié
            // richTextDocument est supposé être rempli ici ...
     
            // Dans cette partie, je récupère toutes les images du document à copier
            // et je les place dans celui de destination
            // Pour chaque bloc du document
            for (QTextBlock bl = richTextDocument.begin(); bl.isValid(); bl = bl.next())
            {
                for (QTextBlock::iterator it = bl.begin(); !it.atEnd(); ++it)
                {
                    QTextFragment currentFragment = it.fragment();
                    if (currentFragment.isValid() && currentFragment.charFormat().isImageFormat())
                    {
                        // Ressource image
                        QString image_name = currentFragment.charFormat().toImageFormat().name();
                        QVariant image_data=richTextDocument.resource(QTextDocument::ImageResource,
                                                                      image_name);
     
                        // Ajout de la ressource au document de destination
                        addImageResource(image_data.value<QImage>(), image_name, ao_doc);
                    }
                }
            }
     
            // Ces deux lignes règlent pour le moment mon soucis ...
            QTextDocumentFragment docFrag(&richTextDocument);
            ai_cursor.insertFragment(docFrag);
    Le "mais ..." au dessus fait allusion à un soucis rencontré avec cette façon de faire :

    En approfondissant les tests, il y a un cas qui ne fonctionne pas correctement : si j'insère le bout de document extrait dans un bloc de mon document principal, le style du bloc est pris en compte mais pas le style de caractère.
    Le bout de code rajouté par rapport au précédent est placé entre (// ******) :
    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
    42
    43
    44
    45
    46
    47
    48
    49
     
        // QTextDocument ao_doc => document vers le quel le contenu sera copié  
     
        QTextDocument richTextDocument; // Document dont le contenu sera recopié  
        // richTextDocument est supposé être rempli ici ...  
     
        // Dans cette partie, je récupère toutes les images du document à copier  
        // et je les place dans celui de destination  
        // Pour chaque bloc du document  
        for (QTextBlock bl = richTextDocument.begin(); bl.isValid(); bl = bl.next())  
        {  
            for (QTextBlock::iterator it = bl.begin(); !it.atEnd(); ++it)  
            {  
                QTextFragment currentFragment = it.fragment();  
                if (currentFragment.isValid() && currentFragment.charFormat().isImageFormat())  
                {  
                    // Ressource image  
                    QString image_name = currentFragment.charFormat().toImageFormat().name();  
                    QVariant image_data=richTextDocument.resource(QTextDocument::ImageResource,  
                                                                  image_name);  
     
                    // Ajout de la ressource au document de destination  
                    addImageResource(image_data.value<QImage>(), image_name, ao_doc);  
                }  
            }  
        }  
     
        // ****** CODE RAJOUTE POUR DEFINIR LE FORMATAGE DE PARAGRAPHE & POLICE *******
            ai_cursor.insertBlock();
     
            // QTextCharFormat
            QTextCharFormat textCharFormat;
            QFont font;
            font.setFamily("Arial");
            font.setItalic(true);
            font.setBold(false);
            font.setUnderline(true);
            textCharFormat.setFont(font);
            ai_cursor.setCharFormat(textCharFormat);
     
            // QTextBlockFormat
            QTextBlockFormat textBlockFormat;
            textBlockFormat.setAlignment(Qt::AlignRight);
            ai_cursor.setBlockFormat(textBlockFormat);
        //  ****** FIN CODE RAJOUTE ********
     
        // Ces deux lignes règlent pour le moment mon soucis ...  
        QTextDocumentFragment docFrag(&richTextDocument);  
        ai_cursor.insertFragment(docFrag);
    Le résultat que j'obtiens avec le code ci-dessus est que le texte est bien aligné à droite (Qt::AlignRight) mais le font n'est pas celui fourni (pas de soulignement, texte non italique, etc ...).

    Une idée ?

Discussions similaires

  1. [Toutes versions] Insérer le contenu d'une cellule dans une autre contenant déjà du texte.
    Par hentone dans le forum Excel
    Réponses: 1
    Dernier message: 03/07/2010, 05h20
  2. Réponses: 2
    Dernier message: 29/12/2008, 01h46
  3. Insérer le contenu d'une requête dans une table
    Par guadian dans le forum VBA Access
    Réponses: 1
    Dernier message: 20/07/2007, 20h16
  4. Réponses: 1
    Dernier message: 09/06/2006, 12h04
  5. Insérer le contenue d'un memo dans une table mysql
    Par kijudr dans le forum Bases de données
    Réponses: 1
    Dernier message: 05/12/2005, 08h39

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