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));
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));
相关文章推荐
- qt利用委托:QStyledItemDelegate,实现tableview 的表格项的自定义显示,如插入图片,绘制控件
- Qt : 自定义委托类.子类化QStyledItemDelegate
- QT中委托(QItemDelegate/QStyledItemDelegate)的使用,以及自定义Delegate
- Qt中QAbstractTableModel、QItemDelegate的联合使用
- QStyledItemDelegate
- qt QItemDelegate 委托 相关函数
- Qt之QTableView添加复选框(QAbstractItemDelegate)
- QTableView 委任用法QStyledItemDelegate
- Qt tableview 使用ComboBox作为delegate时,实现单个cell中的comboBox的item动态变化以及独特性
- Qt之QTableView添加复选框(QAbstractItemDelegate)
- 一起看代码来玩玩QT之18 database(four 向QtableView 添加代理view->setItemDelegate ,让代理作一些东西)
- QT调用Excel时,设置自动调整列宽和所有单元格居中
- Qt之QTimer----每秒都有自己要干的事
- Qt:使用ShaderEffectSource对Item拍摄"UI快照",提升渲染效率
- (五)Qt实现自定义模型基于QAbstractItemModel
- Qt学习之解决QListWidgetItem有重叠时,点一下全部选中的问题
- Qt程序发行Linux版,软件打包知识(patchelf 工具修改依赖库,确认 qmake -v 是自己使用的Qt版本,否则用export PATH进行修改)good
- 深入分析JavaWeb Item33 -- 开发自己简易的JDBC框架
- 开机自动启动自己编写的QT程序
- Qt GraphicsView框架中实现多个item之间的层次调整功能