2016-12-19 1 views
1

Dans la documentation de Item vous pouvez trouver ceci:de performance lors de l'utilisation Text.implicitWidth dans QML

Remarque: Utilisation implicitWidth du texte ou TextEdit et réglage de la largeur n'engagent explicitement une pénalité de performance que le texte doit être étalé deux fois.

donc je ne devrais pas écrire quelque chose comme ceci:

Text { 
    width: implicitWidth 
    text: 'my text defines the width' 
} 

Cela signifie, si je ne mets pas la largeur par d'autres moyens, je ne peux pas l'ancre significative au Text.

Je me demande si la même peine de performance s'applique à cette structure:

Item { 
    id: myAnchorableTextBoundingBox 
    width: myText.implicitWidth 
    height: myText.implicitHeight 
    Text { 
     id: myText 
     text: 'my text defines the width' 
    } 
} 

Ou est-ce une solution probable pour ce usecase?

Il m'a même permet de Elide une largeur maximale comme ceci:

Rectangle { 
    color: 'transparent' 
    border.color: 'red' 
    width: myText.width + 2 
    height: myText.height + 2 
} 

Rectangle { 
    id: myAnchorableTextBoundingBox 
    y: 1 
    x: 1 
    border.color: 'black' 
    width: myText.truncated ? myText.width : myText.implicitWidth 
    height: myText.implicitHeight 
    Text { 
     id: myText 
     text: 'my text defines the width until it elides, then the width is used as limit' 
     elide: Text.ElideRight 
     width: 200 
    } 
} 

Je construirais un imediately Component de cela, si je peux être sûr, il n'y aura pas (trop grande) une pénalité .

Répondre

0

Cette solution de contournement devrait fonctionner correctement. Comme l'indique la documentation, la peine de performance est un problème que lorsque le réglage de la largeur ainsi:

En utilisant implicitWidth [...] et le réglage de la largeur engage explicitement une pénalité de performance

Dans ce cas, , vous ne lisez que la propriété implicitWidth et ne définissez pas le width de l'élément Text, l'avertissement ne s'applique donc pas.