2013-12-07 13 views
6

Desidero visualizzare un menu di scelta rapida facendo clic con il pulsante destro del mouse sulle righe di TableView. Ho provato questo codice:Come visualizzare un menu di scelta rapida con il tasto destro del mouse in 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 
       } 
      } 
     } 
    } 
} 

Il menu contestuale non risulta, perché il gestore onReleased non viene chiamato per fa clic destro.

Ho usato propagateComposedEvents e mouse.accepted = false come suggerito nella documentazione here ma non funziona in ogni caso e non credo che onReleased è un evento composto.

Ho bisogno di aiuto per far funzionare il codice sopra come previsto.

Grazie.

risposta

5

Sembra che questo può essere fatto più facile:

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

Grazie. L'unica riga che dovevo aggiungere al mio codice era 'acceptButtons: Qt.LeftButton | Qt.RightButton'. Questo risolve il problema. – silviubogan

+1

Se si trova che solo l'impostazione "acceptButtons: Qt.RightButton" ha funzionato meglio. In caso contrario, il clic sinistro in qualche modo non si propaga e non è possibile selezionare le righe. –