有没有办法确切知道用户何时开始展开操作,让我们说点击QTreeView中的展开箭头?
对于双击的情况,我可以捕捉到双击事件。
我尝试从QTreeView重新实现此插槽void expand(const QModelIndex &index);
,但它似乎不起作用。
QTreeView中有一个名为void expanded(const QModelIndex &index);
的信号,但它似乎是在扩展发生后发送的。
我正在使用QT 4.8.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;
}
}