get Tree Item rect on mousePressEvent

  • I use QTreeView with model. How can i get Widget or Rect of QTreeView item in his mousePressEvent.

    I try

    void CSProjectsTreeView::mousePressEvent(QMouseEvent *in_pEvent)
        bool l_bDefault = true;
        if(in_pEvent->button() == Qt::LeftButton)
            QPoint l_Pos = in_pEvent->pos();
            QModelIndex l_Index = indexAt(l_Pos);
            CSTreeModel* l_pModel = (CSTreeModel*)((QTreeView*)parent())->model();
            CSTreeItem* l_pItem = l_pModel->getItem(l_Index);
            if(l_pItem->getType() == PROJECT_TREE_ITEM_PROJECT)
                QPixmap pix(":/Images/Resources/Delete.ico");
                QSize size = pix.size();
                QWidget* l_pWidget = indexWidget(l_Index);
                    QRect l_Rec = l_pWidget->rect();
                    int shift = (l_Rec.height() - size.height()) / 2;
                    int startX = l_Rec.x() + l_Rec.width() - size.width() - shift;
                    int startY = l_Rec.y() + shift;
                    int endX = startX + size.width();
                    int endY = startY + size.height();
                    QRect l_Image(startX, startY, size.width(), size.height());
                        l_bDefault = false;
                        qDebug() << "contain!!!";

    but it return null anyway.

    Any solutions?

  • Lifetime Qt Champion

    @Craetor said in get Tree Item rect on mousePressEvent:


    Hi, unless you have set a Widget there it is NULL.
    You can use
    QRect QAbstractItemView::visualRect(const QModelIndex & index) const

    If you need to paint a pixmap over a cell, maybe considering using a delegate ?

  • @mrjj, it works great, thanks!

    Yes, i draw an image on paint event by the QStyledItemDelegate and detect his rect on mousePressEvent

Log in to reply