4

有没有办法准确地知道用户何时开始展开操作,比如单击 QTreeView 中的展开箭头?

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

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

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

我正在使用 QT 4.8.2

4

2 回答 2

12

这就是我为获得所需功能所做的事情:

我像这样从 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
            }
        }
    }
}

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

这与双击事件相结合,为我提供了我需要的东西。

于 2012-10-30T15:40:27.760 回答
0

您可以通过实现更改事件的方法来尝试做到这一点:

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

    switch (e->type()) {
    case QEvent::QGraphicsSceneResizeEvent
        //do want you want to do
        break;
    default:
        break;
    }
  }
于 2012-10-29T15:35:20.907 回答