2015-09-08 8 views
2

Я хочу показать контекстное меню, щелкнув правой кнопкой мыши на Qt5.5 qml TreeView, но щелкнув по нему. Как показать контекстное меню по правому клику?Как показать контекстное меню по правому клику в Qt5.5 qml TreeView

TreeView { 
     id: tree_view 
     anchors.fill: parent 
     model: tree_model 
     headerVisible: false 
     backgroundVisible: false 

     TableViewColumn { 
      role: "display" 
     } 

     onClicked: { 
      console.log("clicked", index) 
     } 

     onDoubleClicked: isExpanded(index) ? collapse(index) : expand(index) 
    } 
+0

Просто столкнулся с той же проблемой, , Я думаю, что решение в настоящее время является взломом с MouseArea и обходит сигналы. –

ответ

1

Вы можете просто определить ваше меню где-нибудь и использовать метод popup, чтобы показать его? Этот метод открывает меню рядом с курсором мыши, поэтому в нужное положение.

Разумеется, вы должны определить свой itemDelegate, а также, если это необходимо, вы можете проигнорировать событие (не потребляйте его).

В документации для clicked сигнал TreeView явно ссылается на делегат элемента, чтобы потреблять эти события, поэтому я предполагаю, что это предполагаемый подход.

0

Это на самом деле очень просто, вам просто нужно MouseArea, выполненный с возможностью принимать только правой кнопкой мыши события, и это не будет мешать обработке мыши в исполнении самого TreeView:

TreeView { 
    id: tree_view 
    anchors.fill: parent 
    model: tree_model 

    TableViewColumn { 
     role: "display" 
    } 

    MouseArea { 
     anchors.fill: parent 
     acceptedButtons: Qt.RightButton 
     onClicked: { 
      var index = parent.indexAt(mouse.x, mouse.y) 
      if (index.valid) { 
       console.log("show context menu for row: " + index.row) 
      } 
     } 
    } 
}