有没有办法准确地知道用户何时开始展开操作,比如单击 QTreeView 中的展开箭头?
对于他双击的情况,我可以捕捉到双击事件。
我尝试void expand(const QModelIndex &index);
从 QTreeView 重新实现这个插槽,但它似乎不起作用。
在 QTreeView 中调用了一个信号void expanded(const QModelIndex &index);
,但它似乎是在扩展发生后发送的。
我正在使用 QT 4.8.2
这就是我为获得所需功能所做的事情:
我像这样从 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
}
}
}
}
我检查鼠标是否留在项目的文本标签上(在展开箭头上的意思)
这与双击事件相结合,为我提供了我需要的东西。
您可以通过实现更改事件的方法来尝试做到这一点:
void YourTreeView::changeEvent(QEvent *e)
{
QFrame::changeEvent(e);
switch (e->type()) {
case QEvent::QGraphicsSceneResizeEvent
//do want you want to do
break;
default:
break;
}
}