QTableView中文本根据内容自动换行

需求:当数据中有\n时,显示成两行。

比如数据 11111\n222222显示成:

11111
2222222

解决办法

参考文章:https://blog.csdn.net/xbnlkdbxl/article/details/51396336

使用上述方法确实可以换行显示,但是存在单元格无法选中(或者说是选中此行时,此单元格不会高亮显示);另外,如果此单元格原文设置了颜色的话,也不会显示。

针对上边的两个问题,经过搜索,找到了解决办法。

参考:

//https://stackoverflow.com/questions/18568594/correct-highlighting-with-qt-custom-delegates

最终代码:

void QMutilLineDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{    
    QString value = index.model()->data( index, Qt::DisplayRole ).toString();    
    QStyleOptionViewItemV4 opt = option;
    this->initStyleOption(&opt, index);
    
    const QWidget *widget = option.widget;    
    opt.text = "";
    //option
    QStyle *style = widget ? widget->style() : QApplication::style();
    
    //下边是设置选中时颜色
    if (option.state & QStyle::State_Selected)
    {
        // Whitee pen while selection
        painter->setPen(Qt::white);
        painter->setBrush(option.palette.highlightedText());
        // This call will take care to draw, dashed line while selecting
        style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, widget);
    }
    else
    {
        painter->setPen(QPen(option.palette.foreground(), 0));
        painter->setBrush(qvariant_cast(index.data(Qt::ForegroundRole)));
    }
    
    //设置字体颜色
    painter->setPen(qvariant_cast(index.data(Qt::ForegroundRole)));
    
    //有\n时自动换行
    painter->drawText(option.rect,  Qt::TextWordWrap | Qt::AlignVCenter, value);
}

你可能感兴趣的:(QT,例子)