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 :

Couleur spécifique pour chaque caractère d'un QString

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2012
    Messages : 48
    Par défaut Couleur spécifique pour chaque caractère d'un QString
    Bonjour à tous!
    Je sollicite votre aide.
    Je suis en possession d'un QString pour lequel je voulais attribuer une couleur à chacune de ses caractères.
    Prenons un exemple:
    Je voulais que chaque fois que le caractère 'L" est rencontré, qu'il lui soit attribuée la couleur verte. La couleur jaune pour '&', la couleur jaune pour 'T',et ainsi de suite...
    J'ai pense à str.setStyleSheet("QLabel{color::green}") par exemple, mais dans ce cas, ce sont tous les caractéres qui seront verts.
    Je vous serai gré si vous m'aidiez á contourner cette difficulté.
    Merci d'avance.

  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
    Un article a été traduit il y a peu, sur la coloration syntaxique : http://qt-quarterly.developpez.com/q...que-qtextedit/, apparemment sinon il faut utiliser QTextCharFormat.

    L'autre technique connue pour information, c'est le HTML (<font color="green">L</font>, remplacée d'ailleurs par Qt par un <span style="color: green">L</span> plus propre si je ne me trompe pas).

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2012
    Messages : 48
    Par défaut
    Merci Troudhyl pour ton aide.
    Je me dois de lire la classe QSyntaxHighlighter et l'appliquer dans ce cas. Elle pourra faire l'affaire.

    Merci une fois de plus.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2012
    Messages : 48
    Par défaut
    J'ai lu le cours sur la classe QSyntaxHighlighter, mais je ne m'enssors toujours pas avec le probléme.
    En effet, j'ai fait ceci:
    1- J'ai écrit plutôt les deux lignes suivantes, puisqu'il est dit dans le cours qu'il faut sous-classer QSyntaxHighlighter et initialiser cette classe avec QTextEdit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QTextEdit text;
    text = "L&TG3J"
    2- Dans le fichier .cpp, j'ai passé text en argument de la methode highlightBlock().
    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
    void maCalsse::highlightBlock(text)
    {
        for (int i = 0; i < text.length(); ++i) {
            if (text.at(i)== Qchar('L')
            {
                setFormat(i, 1, Qt::green);
            }
            else if (text.at(i)== Qchar('&')
            {
                setFormat(i, 1, Qt::yellow);
            }
            else if (text.at(i)== Qchar('T')
            {
                setFormat(i, 1, Qt::red);
            }
        }
        out<<text<<endl;
    }
    Le probléme n'est pas toujours résolu. Je sollicite votre aide une fois de plus.
    a) text est-il passé en argument de la methode highlightBlock() comme il se doit?
    b) Ai-je bien sous-classé la classe QSyntaxHighlighter?
    c) Pourquoi le code tel que je l'ai reécrit ne fonctionne -t-il pas?
    Merci pour votre aide

  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
    Un des gros points forts de Qt c'est sa documentation, et son intégration forte dans l'IDE Qt Creator. Par contre avant de commencer à coder en Qt, faut avoir une idée de ce qu'est la POO, et le C++ pourquoi pas.

    Pourquoi je dis ça, parce que :
    a) Le code que tu as posté n'est pas syntaxiquement correct et donc ne veut rien dire. Même si on voit à peu près ce que tu essayes de faire. Peut-être que ce sont des erreurs en copiant sur le forum mais la signature de ta fonction highlightBlock() a un problème. text visiblement tu l'utilises comme un QString (même si on ne voit nulle part sa déclaration en tant que tel), et tu le déclares en QTextEdit... Je te laisse poster un code corrigé.
    b) A toi de nous dire, ou de nous montrer le bon code, là on ne voit aucun soupçon d'indice pour répondre.
    c) Faut déjà répondre aux deux questions précédentes avant de chercher ce qui ne marche pas.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2012
    Messages : 48
    Par défaut
    Salut Troudhyl et merci pour ta critique et ton éclaircissement.
    Oui, je dois avouer avoir gaffé sur le code. Tu sais, je demandes de l'aide parce que je suis limité dans ce domaine.
    La doc de QTextEdit me dit que cette classe permet d'afficher un texte.
    Donc j'écris un texte (un QString dans mon cas) et puis j'affiche donc mon texte sur la fenêtre en utilisant la fonction toPlainText() dans laquelle je passe mon QString en argument. En supposant que le texte est affiché, je peux alors le manipuler.

    J'ai donc modifié le code comme suit:

    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
    void maClasse::highlightBlock()
    {
        QTextEdit wind;
        QString text = "L&TG3J";
     
        wind.toPlainText(text);
     
        for (int i = 0; i < text.length(); ++i) {
            if (text.at(i)== Qchar('L')
            {
                setFormat(i, 1, Qt::green);
            }
            else if (text.at(i)== Qchar('&')
            {
                setFormat(i, 1, Qt::yellow);
            }
            else if (text.at(i)== Qchar('T')
            {
                setFormat(i, 1, Qt::red);
            }
        }
        out<<text<<endl;
    }

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/08/2014, 15h25
  2. Couleur pour chaque cellule d'une colonne
    Par lo_schil dans le forum Composants
    Réponses: 3
    Dernier message: 03/06/2010, 11h48
  3. Réponses: 1
    Dernier message: 12/05/2010, 19h52
  4. Réponses: 7
    Dernier message: 21/02/2009, 22h22
  5. [W2000] Réseau spécifique pour chaque application
    Par SkyDev dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 01/02/2007, 10h33

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