2016-04-19 6 views
1

Ich möchte ein PNG mit einem Bild und etwas Text, der mit einem Drop-Cap beginnt. AFAIK, kann ich reichen Text mit QTextDocument::drawContents, aber wie kann ich eine Drop-Cap umgeben von normalen Größe Text?Drop-Caps in Qt reichen Text

enter image description here

+0

denke ich [diese] (https://github.com/ftena/qt-snippets/tree/master/richtext) ist nicht genau was du willst, aber vielleicht könnte es helfen. – Tarod

+0

@Tarod danke, es war ein guter Ausgangspunkt – Winand

Antwort

1

Der obere Teil des Bildes ist ein unten QTextBrowser und die untere ist eine transparente gerenderte QPixmap auf einem QLabel gelegt:

enter image description here

I nicht versucht haben, jede zu rendern weitere Bilder noch als meine Frage angegeben, aber es sollte nicht so schwer sein.

textDocument = QtGui.QTextDocument(self) 
    #self.t.setDocument(textDocument) 
    textDocument.setDefaultFont(QtGui.QFont("Times New Roman", 12)) 
    textDocument.setDefaultStyleSheet(".firstcharacter {" 
            "float: left;" 
            "color: #903;" 
            "font-size: 72px;" 
            "font-family: Monotype Corsiva;" 
            "margin-top: -16px;" 
            "margin-bottom: -16px;" 
            "margin-right: 4px;" 
            "}") 
    textDocument.setHtml('<p>' 
        '<table class="firstcharacter"><tr><td>L</td></tr></table>' 
        'ipsum dolor sit amet, consectetur adipiscing elit. Mauris ' 
        'tristique lobortis orci ac lacinia. Fusce eu purus eget ' 
        'diam vehicula auctor nec eu elit. Morbi consequat facilisis ' 
        'orci vel malesuada. Donec ultrices molestie sollicitudin. ' 
        'Aliquam pharetra libero enim. Donec et suscipit massa. ' 
        'Donec dui odio, dignissim non sodales et, tincidunt a sapien. ' 
        'Phasellus elit nibh, adipiscing sed blandit vel, interdum et arcu.' 
        '</p>') 
    textDocument.setTextWidth(400) 
    img = QtGui.QImage(textDocument.size().toSize(), 
         QtGui.QImage.Format_ARGB32_Premultiplied) 
    img.fill(QtCore.Qt.transparent) 
    #img.fill(0xffffffff) 
    p = QtGui.QPainter(img) 
    p.translate(0, 0) #makes drop cap smoother 
    textDocument.drawContents(p) 
    p.end() 
    self.pic.setPixmap(QtGui.QPixmap.fromImage(img)) 
    img.save(r"d:\testimg.png") 

Referenzen:

+0

Wirklich genial! Herzlichen Glückwunsch :) Mit Ihrer Erlaubnis werde ich meinen Code in GitHub aktualisieren, um "float: left;" 'richtig zu verwenden. Glückliche Kodierung! – Tarod

+0

@Tarod aktualisieren Sie es.) – Winand

Verwandte Themen