您的位置:首页 > 编程语言 > Qt开发

QT 自己画单元格 QStyledItemDelegate

2018-02-13 15:58 357 查看
1.创建继承QStyledItemDelegate的类。ScreenTreeWidgetItemDelegate::ScreenTreeWidgetItemDelegate(ScreenTreeWidget *parent):
    QStyledItemDelegate(parent),
    m_handler(parent)
{

}

2. 在创建的 类中实现paint函数,所有单元格的画的内容都在paint函数里来画void ScreenTreeWidgetItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if(!index.data(Qt::UserRole).toBool())
return;

QRect rect = option.rect;
rect.setHeight(rect.height()-1);
painter->fillRect(rect, QColor(39,44,60));

painter->setPen(Qt::white);
QTextOption op;
op.setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);

painter->drawText(option.rect, index.data(Qt::DisplayRole).toString(), op);

QRect iconRect(10,option.rect.y()+(option.rect.height()-16)/2,16,16);
if(m_handler->isExpanded(index))
{
if(option.state & QStyle::State_MouseOver)
{
QImage img(":/image/open_hover");
painter->drawImage(iconRect, img, img.rect());
}
else
{
QImage img(":/image/open");
painter->drawImage(iconRect, img, img.rect());
}

}
else
{
if(option.state & QStyle::State_MouseOver)
{
QImage img(":/image/close_hover");
painter->drawImage(iconRect, img, img.rect());
}
else
{
QImage img(":/image/close");
painter->drawImage(iconRect, img, img.rect());
}

}

}

3.使用,在使用类中设置setItemDelegate(new ScreenTreeWidgetItemDelegate(this));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息