Bonjour,
je dispose d'un TEditText sur ma MainWindow
J'utilise un QPushButton pour mettre la seléction choisie en gras:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->te->setHtml("Voici un <a href='http://#'>lien</a>. Il ne mène nulle part..."); ui->te->setFocus(); }
C'est opérationnel mais j'aurais aimé me rapprocher d'une ergonomie Libre Office.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 void MainWindow::on_btBOLD_clicked() { QTextCursor cs = ui->te->textCursor(); if(!cs.hasSelection()) {return;} QTextCharFormat cf = cs.charFormat(); cf.setFontWeight(QFont::Bold); cs.mergeCharFormat(cf); // ui->te->mergeCurrentCharFormat(cf); //Déselection et replacement curseur cs.clearSelection(); ui->te->setTextCursor(cs); ui->te->setFocus(); }
En LibreOffice : On sélectione la zone, on clique et dans la zone toujours sélectionnée, le résultat est affiché.
En Qt : Mêmes actions. Le fait de sélectionner la zone modifie la couleur du texte. Après l'action du bouton, la zone est sélectionnée (en gris clair) et le texte n'est pas actualisé avec son formatage complet : le gras est bien affiché mais pas les couleurs d'origine. Pour rendre l'effet totalement visible, il faut désélectionner la zone (en cliquant par exemple dans le QTexEdit) ou par programmation. C'est ce que j'ai retenu finalement... et cela convient très bien pour l'usage dont j'ai besoin.
Mais comme j'essaie de développer mes connaissances en Qt, par quelle approche peut-on obtenir l'ergonomie de Libre Office ?
Mon approche "lazarusienne" m'inciterait à procéder ainsi : pour éviter le highlight, on peut facilement modifier la palette de la zone sélectionnée mais cela ne n'empêchera pas la mise en "mono-color" (en blanc par défaut) du texte au moment de la sélection.
donc il faudrait mémoriser également la couleur de chaque caractère (groupe de caractères ?) avant d'intercepter la sélection, la mémoriser... et la "restituer" (i.e. un faux semblant de la sélection ?) après l'action du bouton. Est-ce envisageable ou existe-t-il une méthode plus simple ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 QPalette pa = ui->te->palette(); pa.setColor(QPalette::Highlight, Qt::transparent); //ou autre chose (une nuance de bleu) ui->te->setPalette(pa)
Merci. Cordialement. Gilles
Qt 5.3 - Win7 32 et 64.
Partager