2013-12-07 5 views
6

Я хочу показать контекстное меню, щелкнув правой кнопкой мыши по строкам TableView. Я попробовал этот код:Как показать контекстное меню правой кнопкой мыши в TableView rowDelegate

import QtQuick 2.0 
import QtQuick.Controls 1.0 

TableView { id: tableView 
    width: 300 
    height: 200 

    TableViewColumn { role: 'a'; title: 'a'; width: 50 } 
    TableViewColumn { role: 'b'; title: 'b'; width: 50 } 
    model: ListModel { 
     ListElement { a: 1; b: 2 } 
     ListElement { a: 3; b: 4 } 
     ListElement { a: 5; b: 6 } 
     ListElement { a: 7; b: 8 } 
     ListElement { a: 9; b: 10 } 
     ListElement { a: 11; b: 12 } 
    } 

    Menu { id: contextMenu 
     MenuItem { 
      text: qsTr('Delete') 
     } 
    } 

    rowDelegate: Item { 
     Rectangle { 
      anchors { 
       left: parent.left 
       right: parent.right 
       verticalCenter: parent.verticalCenter 
      } 
      height: parent.height 
      color: styleData.selected ? 'lightblue' : 'white' 
      MouseArea { 
       anchors.fill: parent 
       propagateComposedEvents: true 
       onReleased: { 
        if (typeof styleData.row === 'number') { 
         tableView.currentRow = styleData.row 
         if (mouse.button === Qt.RightButton) { // never true 
          contextMenu.popup() 
         } 
        } 
        mouse.accepted = false 
       } 
      } 
     } 
    } 
} 

Контекстное меню не показано, так как onReleased обработчик не вызывается правой кнопкой мыши.

propagateComposedEvents Я использовал и mouse.accepted = false как предложено в документации here, но он не работает в любом случае, и я не думаю, что onReleased это сочинял событие.

Мне нужна помощь, чтобы код выше работал должным образом.

спасибо.

ответ

5

Похоже, это можно сделать проще:

MouseArea { 
    anchors.fill: parent 
    acceptedButtons: Qt.LeftButton | Qt.RightButton 
    onClicked: { 
     console.log("Click") 
     if (mouse.button == Qt.LeftButton) 
     { 
      console.log("Left") 
     } 
     else if (mouse.button == Qt.RightButton) 
     { 
      console.log("Right") 
     } 
    } 
} 
+1

Спасибо. Единственной строкой, которую я должен был добавить в мой код, было 'acceptedButtons: Qt.LeftButton | Qt.RightButton'. Это решает проблему. – silviubogan

+1

Если обнаружено, что только настройка «принятых кнопок: Qt.RightButton» работает лучше всего. В противном случае левый щелчок как-то не распространяется, и вы не можете выбирать строки. –

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