这个比较简单!两个函数就可以搞定!
void paint(QPainter *painter,const QStyleOptionViewItem &option,const QModelIndex &index) const
bool editorEvent(QEvent *event,QAbstractItemModel *model,const QStyleOptionViewItem &option,const QModelIndex &index)
QStyledItemDelegate中paint事件绘制按钮时候有对应的rect1,rect2,rect3,在editorEvent事件判断event的类型,可以转化为QMouseEvent,可以获取mouseEvent->pos(),再进行判断
 if (event->type() == QEvent::MouseButtonRelease)
    {
        QMouseEvent *mouseEvent = (QMouseEvent *)event;
        if (mouseEvent->button() == Qt::LeftButton)
        {
           if (rect1.contains(mouseEvent->pos()))
                emit button1Clicked(index);
           else if (rect2.contains(mouseEvent->pos()))
                emit button2Clicked(index);
            else if (rect3.contains(mouseEvent->pos()))
                emit button3Clicked(index);
       }
}
在外部连接对应的槽就OK了!