2012-11-09 91 views
4

我創建了一個QTreeWidget並將動畫設置爲true(setAnimated(true))。 當我點擊項目左側的一個標記(三角形)時,它會平滑地展開,但是當我雙擊該項目時,它會快速展開(幾乎就像沒有設置「動畫」標記一樣)。 我也需要雙擊平滑動畫。我怎麼解決這個問題?QTreeWidget雙擊展開動畫

QTreeView撥打電話QTreeViewPrivate::expandOrCollapseItemAtPos標記點擊和QTreeViewPrivate::expand雙擊,所以我無法訪問這些方法。

我使用PySide創建Qt應用程序(但我試過C++,問題是相同的)。

+3

你能發佈您的代碼的可管理的版本? – 2012-12-31 12:23:57

+2

你可以把'itemDoubleClicked'信號連接到擴展槽嗎? – Jeff

回答

1

您需要重寫點擊行爲。檢查事件是否是雙擊,然後您可以將事件重定向到適當的調用。你應該檢查狀態,如果它已經點擊或不阻止可能發生的第二個動畫。

0

訣竅是,雙擊也會在默認實現中增加一次點擊。 在展開動畫之前,默認實現調用QAbstractItemView::setState(AnimatingState)爲動畫設置內部狀態。

而在QAbstractItemView::mouseReleaseEvent(),QAbstractItemView::setState(NoState)在動畫完成前被調用。在此之後,動畫立即終止。

使用下面的代碼來解決:

void YourSubTreeView::mouseReleaseEvent(QMouseEvent* event) 
{ 
    QAbstractItemView::State preState = state(); 
    QTreeView::mouseReleaseEvent(event); 
    if (preState == QAbstractItemView::AnimatingState) 
     setState(preState); 
}