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

Qt Discussion :

HighlightingRule et QtextEdit


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut HighlightingRule et QtextEdit
    Bonjour,

    J'ai un textEdit avec un contenue dans lequel je met en darkBlue toutes les ligne contenant le mot "FIELD_MAP" avec le bout de code ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      HighlightingRule rule;
      QStringList keywordPatterns;
     
      keywordFormat.setFontWeight(QFont::Bold);
      keywordFormat.setForeground(Qt::darkBlue);
      keywordPatterns.clear();
      keywordPatterns << "\\bFIELD_MAP[^\n]*\\b";
      foreach (QString pattern, keywordPatterns) {
        rule.pattern = QRegExp(pattern);
        rule.pattern.setCaseSensitivity(Qt::CaseInsensitive);
        rule.format = keywordFormat;
        highlightingRules.append(rule);
      }
    Ca fonctionne bien à l'execption de 2 choses que je n'arrive pas à realiser, et pourtant j'ai bien lue l'aide sur "QRegExp"

    - Je voudrait que cette regle ne s'applique pas si il y a un ';' devant le mot FIELD_MAP.
    - et enfin, quand je rencontre le mot clef toute la ligne est coloré jusqu'a la fin, mais pas le contenu de la ligne avant le mot clef.

    Pensez-vous qu'il y a moyen de réaliser ces 2 conditions
    Merci d'avance

  2. #2
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Salut,

    1. Bienvenue dans le monde des regexp; pour t'aider à traverser les terres de ce langage hostile, prend grand soin de l'aide mémoire, et lis cette page de l'indispensable regular-expressions.info.
    La solution à ton problème se nomme "Negative lookbehind" et y est détaillée. Mais le problème est que c'est pas (encore?) supporté par Qt... Donc, le workaround à appliquer est: lorsque le texte est matché, tu vérifies si le caractère précédent est un ';'. S'il ne l'est pas, c'est bon, sinon, tu t'arrêtes là.

    2. L'exemple dont tu reprends le code fait à 1 variable près ce qu'il te faut. Indice, c'est dans cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setFormat(index, length, rule.format);

  3. #3
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Merci pour tes liens
    J'ai beau modifier l'example comme tu me suggeres mais pour l'instant sans réussite!

  4. #4
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    C'est à dire? Qu'est ce que je t'ai suggéré?

  5. #5
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    J'avais cru comprendre quand mettant une condition sur la fonction "setFormat" je pouvais m'en sortir. mais visiblement c'est pas si simple

  6. #6
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Réfléchis... C'est quoi index ? length ?

  7. #7
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    ouai, faut que je fouille de ce coté là, effectivement.
    Merci de tes suggestions

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Je viens de tester l'example dans Qt 4.4.
    Je n'ai pas ton problème. Voici ce que j'ai changé :
    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
     
    //! [3]
        singleLineCommentFormat.setForeground(Qt::darkRed);//ici pour voir la difference
        rule.pattern = QRegExp(";[^\n]*"); //ici
        rule.format = singleLineCommentFormat;
        highlightingRules.append(rule);
     
        multiLineCommentFormat.setForeground(Qt::red);//ici pour voir la difference
    //! [3]
     
    ...
    //! [6]
        commentStartExpression = QRegExp("\\bend\\b");//ici
        commentEndExpression = QRegExp("\\bendding\\b");//ici
    }
    //! [6]
    Je te laisse regarder le code.
    EN gros il utilse setCurrentBlockState() et previousBlockState() pour savoir si il est en commentaire globale

  9. #9
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Merci Maugaulois, pour ton bout de code, sauf qu'a part la couleur c'est exactement mon code, donc le comportement reste le même, dé qu'il rencontre ';end' la couleur 'red' s'arrete alors que je ne le veux pas

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par uriotcea Voir le message
    Merci Maugaulois, pour ton bout de code, sauf qu'a part la couleur c'est exactement mon code,
    pas avec le code que tu nous as montré....

    Peut etre que le code dans la version Qt4.4 est un peu differente

  11. #11
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    J'ai bien regardé ton code, à part les couleurs tout est identique à moi, je n'ai pas installé la version 4.4
    Est-ce que cela t'emberai de me transmettre les 2 fichiers cpp de l'example?

Discussions similaires

  1. QTextEdit, Qt Designer et Python
    Par dotten dans le forum PyQt
    Réponses: 1
    Dernier message: 29/03/2008, 13h59
  2. QTextEdit : Changer la couleur du text
    Par julien89 dans le forum Qt
    Réponses: 4
    Dernier message: 21/01/2008, 19h46
  3. recuperer texte QTextEdit
    Par sebatlante dans le forum Qt
    Réponses: 5
    Dernier message: 04/01/2008, 12h57
  4. Récupèrer un contenu QTextEdit
    Par wystan dans le forum Qt
    Réponses: 2
    Dernier message: 01/05/2007, 22h48

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