开发者

How to use a QGraphicsWebView?

I want to use a QGraphicWebView inside a delegate to render a QTableView cell, but I just don't know what to do with the QStyleOptionGraphicsItem parameter the paint() method requires. How to build it up / where should I retrieve it? I'm using this code as reference, so the paint() method should be something like this:

def paint(self, painter, option, index):
    web = QGraphicsWebView()
    web.setHtml(some_html_text)
    web.page().viewportSize().setW开发者_如何学运维idth(option.rect.width())
    painter.save()
    painter.translate(option.rect.topLeft());
    painter.setClipRect(option.rect.translated(-option.rect.topLeft()))
    web.paint(painter, ??????) # what here?
    painter.restore()

Any advice?


I'll assume that you don't really need QGraphicsWebView and that QWebView is sufficient.

It's important to keep in mind that you're not expected to call QWidget::paintEvent() yourself. Given that constraint, you'll want to use a helper class that can render on a paint device or render using a given painter. QWebFrame has one such method in the form of its render function. Based off of your linked-to example, the following should work:

class HTMLDelegate(QStyledItemDelegate):

    def paint(self, painter, option, index):
        model = index.model()
        record = model.listdata[index.row()]

        # don't instantiate every time, so move this out
        # to the class level
        web = QWebView() 
        web.setHtml(record)
        web.page().viewportSize().setWidth(option.rect.width())

        painter.save()
        painter.translate(option.rect.topLeft());
        painter.setClipRect(option.rect.translated(-option.rect.topLeft()))
        web.page().mainFrame().render(painter)
        painter.restore()
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜