2009-05-31 2 views
0

Il s'agit d'une question sur la bibliothèque Qt, pas sur la conception Web.Style HTML par défaut pour les contrôles dans la bibliothèque Qt

Pour QLabel et d'autres contrôles, je peux définir du texte HTML, par exemple "< h3> Certains textes </h3>". La question est: où est le style HTML par défaut est défini? Comment puis-je savoir quelle police serait utilisée pour < h3> tag? La question suivante: puis-je changer le style HTML par défaut? Editer: Je veux spécifier en un endroit dans mon code comment mes commandes seraient affichées. Spécifier le style CSS dans toutes les étiquettes ne semble pas être une solution élégante pour moi.

Edit2: Il semble que les gens ne se posent pas la question. Je vais essayer de nouveau. Supposons que je fais ce qui suit:

 

QLabel* label = ... 
label->setText("This <b>is</b> a <h3>Header</h3>"); 
 

La question: quelles fontes seront utilisées pour le rendu du texte de l'étiquette? Comment puis-je les contrôler? Existe-t-il un moyen de spécifier, disons, la taille de police par défaut pour les en-têtes < h3? Edit3: Thomi a suggéré d'utiliser QTextDocument :: setDefaultStyleSheet. Mais ce n'est qu'une solution de contournement. Je dois appliquer manuellement le style css à tous les QTextEdits (et non aux QLabels) dans l'interface. Et la question était: comment trouver la feuille de style par défaut? QTextDocument :: setDefaultStyleSheet l'écrase juste pour un seul objet QTextDocument. Peut-être que QTextDocument :: defaultStyleSheet le renvoie? Je n'ai pas d'ordinateur avec Qt insatlled maintenant donc je ne peux pas le vérifier.

+0

Sergy - Je n'ai pas compris la distinction car cela fait très longtemps que je n'ai rien lu sur Qt. Ainsi, j'ai supprimé ma réponse. Merci de clarifier. –

+0

Sergey - Je pense que le titre de votre question doit être modifié pour mentionner Qt/C++ –

Répondre

2

Ce que vous voulez ne peut pas être fait avec un QLabel. Le QLabel est conçu pour contenir des étiquettes de texte primitives - son support HTML est plutôt ... ropey.

Toutefois, vous pouvez pouvez cela à l'aide d'un QTextEdit & QTextDocument.

Essayez quelque chose comme ça (j'écris ceci de la mémoire, donc il ne peut compiler ou être 100% correct):

QTextDocument *doc = new QTextDocument(this); 
doc->setDefaultStyleSheet("h3 { font-color: red; }"); 
QTextEdit *edit = new QTextEdit(this); 
edit->setDocument(doc); 
edit->setHTML("this is a red <h3>heading</h3>"); 

L'important est d'utiliser un QTextDocument, qui vous permet de changer la feuille de style HTML. De la documentation QT:

 
The default style sheet is applied to all newly HTML formatted text that is inserted into the document, for example using setHtml() or QTextCursor::insertHtml(). 

The style sheet needs to be compliant to CSS 2.1 syntax. 

Note: Changing the default style sheet does not have any effect to the existing content of the document. 

see here for more info

Edit:

Pour obtenir la feuille de style par défaut, vous pouvez appeler QTextDocument::DefaultStyleSheet() - cependant, cela ne vaut que pour QTextDocuments et peut ou ne peut pas demander à tous Contrôles Qt (y compris QLabel).

+0

J'ai reflété votre réponse dans la question. –

+0

Il semble qu'il n'y ait pas d'autre moyen de résoudre le problème. J'ai accepté votre question. –

1

Jetez un oeil à Qt Documentation about Style Sheets

Vous pouvez probablement utiliser QApplication::setStyleSheet() ou QWidget::setStyleSheet() pour le faire.

+0

Edited, cela devrait être la bonne réponse. – Mahtar

+1

Je l'ai lu avant de créer la question. Il n'y a pas un mot sur le HTML. –

+1

no. Il pose des questions sur les feuilles de style HTML, qui ne sont pas la même chose que les feuilles de style de widget. Si je comprends bien, il cherche à changer le style HTML que QLabel utilise pour rendre du texte HTML simple, plutôt que de changer la façon dont le widget étiquette apparaît à l'écran. – Thomi

1

Comme mentionné dans d'autres réponses, vous pouvez le faire pour les styles de widget, mais pas pour les balises HTML. La seule façon de le faire est de définir les styles CSS dans votre propriété widgets text individuellement. Qt utilise son moteur de texte enrichi pour rendre les balises HTML définies selon les règles de la spécification HTML 4. Voir Supported HTML Subset

Si vous avez juste besoin d'un style pour toutes vos étiquettes pourquoi ne pas définir à l'aide setStyleSheet() comme ceci:

MainWindow w;  
w.setStyleSheet("QLabel{font-size:20px; color:purple;};"); 

Sauf si vous voulez utiliser plus d'un style à l'intérieur de vos étiquettes (par exemple: " Plus que un style ") c'est la bonne façon de le faire.

+0

Je dois utiliser plus d'un style. Je suppose que je vais créer un emballage moche qui va ajouter des styles aux étiquettes html. –

0

Au dernier QT, c'est-à-dire sur QT4..Les réponses ci-dessus fonctionnent. savoir quelle version QT u r travailler sur ... Essayez ce qui suit ...

QLabel{ 
    border: 2px solid green; 
    border-radius: 4px; 
    padding: 2px; 
    background-image: url(images/welcome.png); 
} 

link

+1

Les réponses ci-dessus fonctionnent mais pour différentes questions je suppose. Je modifie la question pour tenter de la clarifier. –