2013-12-07 52 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處理程序不會調用右鍵點擊。

我用propagateComposedEventsmouse.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

如果發現只設置「acceptedButtons:Qt.RightButton」效果最好。否則,左鍵點擊不會傳播,你不能選擇行。 –

相關問題