2017-08-10 1 views
0

Ich möchte einen komplexen Rich-Text-QLabel-Inhalt zu einem Pixmap rendern, so dass ich diese Pixmap viel glatter als das Rendern der QLabel jeden Frame animieren kann.Berechne die Größe von gerenderten QLabel

Woher weiß ich, welche Größe ich Pixmap erstellen sollte. Gibt es eine Möglichkeit, QLabel zu fragen, welche bevorzugte Bounding Rect Sie brauchen, um den Inhalt rendern zu können - unbeschränkt durch irgendein Eltern-Layout?

Ich habe QLabel :: fontMetrics versucht, aber das funktioniert natürlich nicht für Rich-Text-Inhalte. Kann ich noch etwas anderes benutzen?

Antwort

0

Im Allgemeinen funktioniert der Aufruf von QLabel :: adjustSize() und das Abrufen von QLabel :: size().

Wenn das QLabel jedoch kein übergeordnetes Element aufweist (d. H. Es wird als Widget auf oberster Ebene betrachtet), beschränkt Qt die Größe des Widgets auf 2/3 der Bildschirmgröße. Ich stieß auf dieses Problem - ich konnte nicht herausfinden, warum das QLabel immer auf 1280 Pixel (auf einem 1920x1080 Bildschirm) abgeschnitten wurde.

Aber sizeHint() gab immer die richtige Größe für das Etikett zurück.

Am Ende, ich habe:

label->adjustSize(); 
label->resize(label->sizeHint()); 

QPixmap pixmap(label->size()); 
label->render(&pixmap); 

Es ist wichtig, das Label und nicht nur stellen Sie die Pixmap des Labels sizeHint(), weil es immer noch abgeschnitten werden könnte, um die Größe.

0

Sie können dies erreichen, indem Sie einfach QPixmap::grabWidget(label); keine Größe benötigt. Weitere Informationen finden Sie in den Dokumenten.