注意事项:
1.重写paintEvent事件时,最后要将事件传入QTreeWidget::paintEvent(e);否则在界面上不会显示item数据
setColumnCount(5);
setColumnWidth(0, 1*g_dscale);
setColumnWidth(1, 20*g_dscale);
setColumnWidth(2, 30*g_dscale);
setColumnWidth(3, 122*g_dscale);
setColumnWidth(4, 30*g_dscale);
//设置树形有多少列,每一列的宽
m_item = new QTreeWidgetItem(treewidget);//该item有五列
item->setIcon(2, QIcon(QPixmap(QString(":/prefix/res/1.png")//设置第二列
m_treewidget->setItemWidget(m_item , 1, pWidget);
//添加item,并且设置item的第几列数据
m_itemDelegate = new MYItemDelegate(this);
setItemDelegateForColumn(3, m_itemDelegate);
设置tree第几列为委托列,显示委托数据
setItemWidget(m_item , 2, pWidget);
//添加item,并且设置item的第几列数据
2.重写绘画事件:
void TreeWidget::paintEvent(QPaintEvent *event)
{
QTreeWidget::paintEvent(event);
if (currentItem() != NULL)
{
QPainter paint(viewport());
//在输出界面上绘画才可以显示,view类的绘画事件都需调用viewport
paint.setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing);
QPainterPath path;
QRect r = visualItemRect(currentItem());
//获取所选item的矩形框
path.addEllipse(r.x()-7, r.y()+3, 7, 7); //draw red point on share button
paint.fillPath(path, Qt::red);
}
};
3.样式
3.1
m_treeWidget->setStyleSheet("QTreeWidget{background-color: rgba(255, 0, 255, 255);border: 0;color :#FFFFFF;}
QTreeWidget:item:hover{background-color:rgba(255, 255, 255, 26);}
QTreeWidget::item:selected{background-color:rgba(255, 0, 0, 255);}
QTreeWidget::branch:selected{background-color:rgba(255, 255, 0, 255);}
");
自定义分支的背景图片
QTreeWidget::branch{background: rgb(0, 170, 127); }
3.2
取消根节点装饰三角
setRootIsDecorated(false);
3.3
首字缩进
setIndentation(20);
设置取消根节点修饰时,首字缩进效果会被取消,可以通过设置branch来调三角样式