我如何从MouseArea发送信号到父对象(TableView)?

时间:2014-11-29 19:17:45

标签: qt tableview signals-slots

如果我将MouseArea添加到TableView实体(以捕获按钮等),那么TableView中的标准反应就不会响应。我可以将信号从MouseArea发送到父TableView吗?

TableView {                            

   TableViewColumn {
       role: "name"
       title: "Name"
       width: (parent.width / 2)
   }
   TableViewColumn {
       role: "type"
       title: "Type"
       width: parent.width / 4
   }
   TableViewColumn {
       role: "size"
       title: "Size"
       width: parent.width / 4
   }

   MouseArea {
       anchors.fill: parent
       acceptedButtons: Qt.RightButton | Qt.LeftButton
       onClicked: {
           if (mouse.button == Qt.RightButton) {
              ...
           }
           else if(mouse.button == Qt.LeftButton){
              ...
           }
       }
   }
}

1 个答案:

答案 0 :(得分:0)

您可以使用

将其传播到父级
propagateComposedEvents: true

并致电

mouse.accepted = false

在每个需要的处理程序中。

来自doc

  

将接受设置为true可防止鼠标事件发生   传播到此项目下方的项目。

     

通常,如果项目作用于鼠标事件,那么它应该是   接受,以便堆叠顺序中较低的项目也不响应   同一事件。

下一个代码:

   MouseArea 
   {
       anchors.fill: parent
       acceptedButtons: Qt.RightButton | Qt.LeftButton
       propagateComposedEvents: true

       onPressed:
       {
           if (mouse.button == Qt.RightButton) {
               console.log("ss") 
           }
           else if(mouse.button == Qt.LeftButton){
               console.log("ss")
           }
           mouse.accepted = false
       }
       onReleased: mouse.accepted = false
       onPressAndHold:  mouse.accepted = false
   }

捕获点击次数(console.log("ss")有效),但tableview获取所有事件,因此您可以移动列,点击它等。