2015-05-26 5 views
1

У меня есть контекстное меню, которое я хочу показывать только тогда, когда находится над элементом из QTreeView. Когда я нахожусь поверх пустого пространства, я ничего не хочу делать. Это то, что я до сих порКонтекстное меню QT только над выбором QTreeView

void MainTreeViewController::showContextMenu(const QPoint& pos) 
{ 

    QPoint globalPos = mtreeView->mapToGlobal(pos); 
    QMenu rightClickMenu; 
    for(int i = 0; i < kCharModelRightClickOptionsCount; ++i){ 
     rightClickMenu.addAction("Menu option"); 
    } 

    QAction* selectedItem = rightClickMenu.exec(globalPos); 
    if (selectedItem){ 

    } 
} 

Спасибо!

ответ

4

Сначала вам нужно найти индекс модели под курсором, используя функцию QAbstractItemView::indexAt(). Получение недопустимого индекса указывает на то, что вы выходите из любого элемента дерева. Таким образом, ваш код будет выглядеть так:

void MainTreeViewController::showContextMenu(const QPoint& pos) 
{ 
    // Do not show menu if clicked outside of tree view nodes. 
    QModelIndex idx = mtreeView->indexAt(pos); 
    if (!idx.isValid()) 
     return; 

    QPoint globalPos = mtreeView->mapToGlobal(pos); 
    QMenu rightClickMenu; 
    for(int i = 0; i < kCharModelRightClickOptionsCount; ++i){ 
     rightClickMenu.addAction("Menu option"); 
    } 

    QAction* selectedItem = rightClickMenu.exec(globalPos); 
    if (selectedItem){ 

    } 
} 
Смежные вопросы