项视图类的自定义委托之文字省略

来源:互联网 发布:软件操作手册 编辑:程序博客网 时间:2024/06/06 01:47

    本文是原创,装载请表明装载地址。

    最近在做项视图类的自定义委托的事情,知道自定义委托其中包含两个类QItemDelegate和QStyledItemDelegate,这两者的区别这里就不说了,可以查看说明文档。仔细查看这两个类,就会发现QItemDelegate带有drawBackground()、drawCheck()、drawDecoration()、drawDisplay()、drawFocus()这些方便的绘制函数,但是QStyledItemDelegate却完全没有这些函数,而我却要使用QStyledItemDelegate,并且想要做出drawDisplay()对文字的显示效果(这个效果就是当文字的宽度比对应项的宽度大的时候,文字会变成带有点的省略模式ElideMode,例如,”我的名字叫做Hurricane”的文字省略效果就是”我的名字叫…”)

经过了一番的探索,终于给我探索出来了,方法如下:
    void ListWidgetDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option,
           const QModelIndex & index) const
{
    ……
    painter->save();
    QRect rc = option.rect;
    int textH = 15;
    QRect topRect = QRect(rc.topLeft(), QPoint(rc.right(), rc.bottom() - textH));
    QRect bottomRect = QRect(topRect.bottomLeft(), rc.bottomRight());
    QFontMetrics fontMetrics = painter->fontMetrics();
    text = fontMetrics.elidedText(text, option.textElideMode, rc.width());
    painter->drawText(bottomRect, Qt::AlignCenter, text);

    painter->restore();
    ……
}
也就是利用QPainter::fontMetrics()函数返回对应painter的字体度量参数,并且QFontMetrics这个类有一个函数elidedText()就是返回对应的省略文字。
    探索过程:

    我一开始是查看QStyleOptionViewItem这个类的说明文档以寻求解决办法,结果发现了


详细说明如下:


然后,我又点击了上面框住的Qt::TextElideMode,有如下的说明:


然后,我又想起了QPainter类是有关于font的函数,查看QPainter的说明文档,搜索“font”发现如下:


QPainter::fontMetrics就是需要的。
0 0