2016-04-19 4 views
1

Я хочу отобразить PNG с изображением и некоторым текстом, который начинается с капюшона. AFAIK, я могу сделать богатый текст QTextDocument::drawContents, но как я могу добавить капсюльную каплю, окруженную текстом обычного размера?Drop caps in Qt rich text

enter image description here

+0

Я думаю, что [это] (https://github.com/ftena/qt-snippets/tree/master/richtext) не совсем что вы хотите, но, возможно, это может помочь. – Tarod

+0

@Tarod спасибо, это была хорошая отправная точка – Winand

ответ

1

Верхняя часть изображения ниже является QTextBrowser, а нижняя представляет собой прозрачный оказываемых QPixmap размещен на QLabel:

enter image description here

Я не пытался оказывать любое дополнительные фотографии пока, как мой вопрос заявил, но это не должно быть так сложно.

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") 

Ссылки:

+0

Поистине потрясающе! Поздравляем :) С вашего разрешения я обновляю свой код в GitHub, чтобы использовать '' float: left; "' правильно. Счастливое кодирование! – Tarod

+0

@Tarod обновите его.) – Winand