如何准确了解用户何时展开QTreeView项目?

时间:2012-10-29 14:51:35

标签: c++ qt qtreeview qt4.8

有没有办法确切知道用​​户何时开始展开操作,让我们说点击QTreeView中的展开箭头?

对于双击的情况,我可以捕捉到双击事件。

我尝试从QTreeView重新实现此插槽void expand(const QModelIndex &index);,但它似乎不起作用。

QTreeView中有一个名为void expanded(const QModelIndex &index);的信号,但它似乎是在扩展发生后发送的。

我正在使用QT 4.8.2

2 个答案:

答案 0 :(得分:10)

这就是我为获得所需功能所做的工作:

我像QTreeView一样重新实现了mousePressEvent

void MyTreeView::mousePressEvent(QMouseEvent *event)
{
    QModelIndex clickedIndex = indexAt(event->pos());
    if(clickedIndex.isValid())
    {
        QRect vrect = visualRect(clickedIndex);
        int itemIdentation = vrect.x() - visualRect(rootIndex()).x();
        if(event->pos().x() < itemIdentation)
        {
            if(!isExpanded(clickedIndex))
            {
             //do stuff
            }
        }
    }
}

我检查鼠标是否留在项目的文本标签上(意思是展开箭头)

这与双击事件相结合,为我提供了所需。

答案 1 :(得分:0)

您可以通过实施更改事件的方法来尝试:

  void YourTreeView::changeEvent(QEvent *e)
  {
    QFrame::changeEvent(e);

    switch (e->type()) {
    case QEvent::QGraphicsSceneResizeEvent
        //do want you want to do
        break;
    default:
        break;
    }
  }