使用 QStyledItemDelegate 代理
class MultiLineDelegate: public QStyledItemDelegate { Q_OBJECT public: MultiLineDelegate(QObject *parent = 0): QStyledItemDelegate(parent) { } protected: void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; };
void MultiLineDelegate::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); opt.text = ""; const QWidget *widget = option.widget; //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<QBrush>(index.data(Qt::ForegroundRole))); }*/ //设置字体颜色,这里是黑色,无法获取到QSS设置的颜色,改为手动设置 //QColor fontcolor = qvariant_cast<QColor>(index.data(Qt::ForegroundRole)); painter->setPen(QColor(26,52,93)); //有\n时自动换行 painter->drawText(option.rect, Qt::TextWordWrap | Qt::AlignVCenter, value); }
使用:
mTableView->setItemDelegateForColumn(3, new MultiLineDelegate);//可设置某行、某列或全部
文章评论