【问题标题】:QML TableView Mouse area does not propagate click to selection modelQML TableView 鼠标区域不会将点击传播到选择模型
【发布时间】:2018-06-16 19:40:25
【问题描述】:

我有一个 TableView 和一个包含 MouseArea 的委托。我想将点击传播到TableView,以便选择项目仍然有效。但是,在我的MouseArea 存在的情况下,我无法选择TableView 中的元素。我该如何更改?

TableView {
    id: tableView
    model: testModel
    selectionMode: SelectionMode.SingleSelection

    Component {
        id: testDelegate
        Item {
            id: delegateItem
                Text{
                    id: ctext
                    text: styleData.value
                    color: styleData.textColor
                }
                MouseArea {
                     id: mouseArea
                     acceptedButtons: Qt.LeftButton | Qt.RightButton
                     anchors.fill: parent
                     propagateComposedEvents: true
                      onClicked: {
                        console.log("click");
                        mouse.accepted = false
                      }

                 }


            }


    }
    TableViewColumn {
        role: "TestRole"
        delegate: testDelegate
    }
}

【问题讨论】:

    标签: qt qml


    【解决方案1】:

    如果您不介意使用onPressed 事件而不是onClicked 进行用户交互,传播该事件还将允许在TableView 中进行选择(如果需要,包括ExtendedSelection 模式):

    MouseArea {
        // ...
        onPressed: {
            mouse.accepted = false
        }
    }
    

    【讨论】:

    • 这就是诀窍!试图将它与 onClicked 结合起来,但遗憾的是后者没有被调用
    【解决方案2】:

    由于您重新定义了项目委托,您还应该实现项目选择。 我通常这样做:

    onClicked: {
        tableView.selection.clear();
        tableView.selection.select(styleData.row);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 2013-07-04
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      相关资源
      最近更新 更多