2008-10-06 81 views
1

我有一個QTreeView類安裝爲一個上下文菜單如下:Qt的上下文菜單中選擇突破在QTreeView則

m_ui.tree->setContextMenuPolicy(Qt::CustomContextMenu); 
connect(m_ui.tree, SIGNAL(customContextMenuRequested(const QPoint&)), 
     this, SLOT(ShowTreeContextMenu(const QPoint&))); 
... 
void ShowTreeContextMenu(const QPoint& point) 
{ 
    m_treeContextMenu->exec(m_ui.tree->viewport()->mapToGlobal(point)); 
} 

然而,當正在顯示的上下文菜單中QTreeView將不再響應鼠標點擊。在顯示上下文菜單時單擊QTreeView中的項目將刪除上下文菜單,但不會選擇點擊的項目。

當右鍵單擊新項目時,由於上下文菜單在新項目上彈出,但是由於沒有選擇項目,所以上下文菜單的內容引用了先前選擇的項目,這尤其令人迷惑。

+0

我認爲這是現在固定在Qt 4.4.3 – Nick 2009-03-18 21:12:26

回答

1

你不說你正在使用的Qt的版本,但我們發現了同樣的問題在Qt4.4.0,它在4.3的工作。我們向Trolltech報告這是一個bug 225615

這仍然被標記爲掛起,所以同時我會按照Shy的建議攔截右鍵並自己做出選擇。

+0

是的,使用Qt 4.4。謝謝 – Niall 2008-10-06 10:26:49

2

我沒有驗證的一個可能的解決方案是捕獲右鍵單擊事件,手動在樹視圖中進行選擇,然後調用父級單擊事件,然後激活上下文菜單。

1

子類QTreeView並添加受保護的方法void contextMenuEvent(QContextMenuEvent * event);在這種方法中,你執行QMenu:

class TreeView : public QTreeView{ 
    Q_OBJECT 
public: 
    TreeView(QWidget *parent); 
    ~TreeView(); 
protected: 
    void contextMenuEvent(QContextMenuEvent *event); 
}; 

void TreeView::contextMenuEvent(QContextMenuEvent *event){ 
    QMenu menu(this); 
    menu.addAction(action1); 
    menu.addAction(action2); 
    //... 
    menu.addAction(actionN); 
    menu.exec(event->globalPos()); 
} 
+0

試過這種方法,它有相同的問題 – Niall 2008-10-06 10:21:03