2014-05-22 6 views
2

나는 Delegates를 사용하여 TableViews에서 HTML을 사용하는 방법을 설명하는 this 포스트를 따라 갔다.HTML로 단어 줄 바꿈? QTabelView와 Delegates

지금 여기 트위스트 내가

가 어떻게 내 html로 줄 바꿈을 할 수 밖이 질수 그림. 예를 들어 텍스트 인 경우 :

"나는 정보를 식물성 동물과 미네랄을했습니다, 현대 소장의 매우 모델이다, 나는 영국 kinges을 알고 나는 마라톤에서 역사적 싸움을 인용 워털루 순서대로 범주 ... "

현재 모든 것이 tableView 셀에 한 줄에 나타납니다. 이 단어를 감싸는 방법이 있습니까? 다음과 같은 페인트 방법이 있습니다

void HTMLDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex &index) const 
{ 
    QStyleOptionViewItemV4 options = option; 
    initStyleOption(&options, index); 

    painter->save(); 

    QTextDocument doc; 
    doc.setHtml(options.text); 

    options.text = ""; 
    options.widget->style()->drawControl(QStyle::CE_ItemViewItem, &options, painter); 

    painter->translate(options.rect.left(), options.rect.top()+0); 


    QRect clip(0, 0, options.rect.width(), options.rect.height()); 
    doc.drawContents(painter, clip); 

    painter->restore(); 
} 
+0

위젯이이 텍스트를 표시하기 위해 어떤 종류의 위젯을 제공합니까? – vahancho

+0

방금 ​​코드를 업데이트했습니다. – MistyD

답변

3

성능이 심각 할 것입니다.

void HTMLDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex &index) const 
{ 
    QStyleOptionViewItemV4 options = option; 
    initStyleOption(&options, index); 

    painter->save(); 

    QTextDocument doc; 
    QTextOption textOption(doc.defaultTextOption()); 
    textOption.setWrapMode(QTextOption::WordWrap); 
    doc.setDefaultTextOption(textOption); 

    doc.setHtml(options.text); 
    doc.setTextWidth(options.rect.width()); 

    options.text = ""; 
    options.widget->style()->drawControl(QStyle::CE_ItemViewItem, &options, painter); 

    painter->translate(options.rect.left(), options.rect.top()+0); 


    QRect clip(0, 0, options.rect.width(), options.rect.height()); 
    doc.drawContents(painter, clip); 

    painter->restore(); 
}