重载QTreeView的mousePressEvent方法处理QStandardItem的check消息

来源:互联网 发布:企业资质软件下载 编辑:程序博客网 时间:2024/05/16 13:43
class CQTreeView : public QTreeView
{
    Q_OBJECT
public:
    CQTreeView();
public:
    void mousePressEvent(QMouseEvent *event);
    void mark_subitem(QModelIndex index);
    void unmark_subitem(QModelIndex index);
};
CQTreeView::CQTreeView()
{
}
void CQTreeView::mousePressEvent(QMouseEvent *event)
{
    QModelIndex indexClicked = indexAt(event->pos());
    if( indexClicked.isValid() )
    {
        QRect vrect = visualRect(indexClicked);
        int itemIndentation = vrect.x() - visualRect(rootIndex()).x();
        QRect rect = QRect(header()->sectionViewportPosition(0) + itemIndentation, vrect.y(), 
                           style()->pixelMetric(QStyle::PM_IndicatorWidth), vrect.height());
        if( rect.contains(event->pos()) )
        {
            QStandardItem *item = ((QStandardItemModel*)model())->itemFromIndex(indexClicked);
            if( item->checkState()==Qt::Unchecked )
            {
                mark_subitem(indexClicked);
            }
            else
            {
                unmark_subitem(indexClicked);
            }
            QTreeView::mousePressEvent(event);
            return;
        }
        else
        {
            QTreeView::mousePressEvent(event);
        }
    }
}
void CQTreeView::mark_subitem(QModelIndex index)
{
    qDebug()<< "mark item, set checked";
    //model()->rowCount(index);
}
void CQTreeView::unmark_subitem(QModelIndex index)
{
    qDebug()<< "mark item, set uncheck";
}

原创粉丝点击