2016-01-19 201 views
0

我需要連接一些簡單的過濾功能,鼠標點擊QTreeView標題項。很簡單,我實現了一個連接到槽函數:QHeaderView鼠標跟蹤失敗

QTreeView::header()->sectionClicked(int)

設置

QTreeView::header()->setSectionsClickable(true)

後,sectionClicked發出任何時候,我點擊的標題由默認懸停強調會產生任何可點擊的標題。

問題是,懸停在可點擊標題的某些區域將無法識別。因此,在這些部分沒有亮點,我也不會得到任何觸發器。我將其追溯到更遠的位置,並從QHeaderView中派生出我自己的班級,並將一些輸出放入mouseMoveEvent

class MyHeaderView : public QHeaderView 
{ 
    Q_OBJECT 
public: 
    MyHeaderView(QWidget* parent = 0) 
     : QHeaderView(Qt::Horizontal, parent) 
    { 
     setMouseTracking(true); 
    } 
protected: 
    virtual void mouseMoveEvent(QMouseEvent* event) 
    { 
     qDebug() << event->pos(); 
    } 
}; 

同時使所有QTreeView設置,因爲他們,我通過

QTreeView::setHeader(QHeaderView*)

我可以看到設置這個類的一個實例是頭,在所有方面均懸停效果失敗,我沒有得到調試輸出,你可以在覆蓋的mouseMoveEvent中看到。

因此,我假設鼠標跟蹤無法正常工作。

我正在使用的整體應用程序很安靜,所以我爲此設置了一個獨立的示例。令我驚訝的是,一切都按預期工作。我無能爲力,我應該如何繼續這樣做。任何人都可以想到鼠標跟蹤在widget的某些部分失敗的原因嗎?它可能是一個幀率問題與缺乏表現?是否存在影響整個鼠標跟蹤區域的小部件設置?家長小部件可以影響鼠標跟蹤嗎?

回答

0

在我的應用程序中,我有一個控制器類,它處理很多連接到樹視圖發出的各種信號的應用程序邏輯。這個類不能渲染任何可視化。因此,這將是從QObject派生出來的最合理的選擇。過了一會兒我注意到,它實際上是從QWidget派生出來的。作爲一個QWidget,我猜測它試圖渲染某種形式的視覺表示,覆蓋樹視圖。這就是爲什麼我在標題的某些部分沒有得到任何鼠標事件。

將我的控制器的基類更改爲QObject後,再次正常工作。