QML TableView 鼠标区域不会将点击传播到选择模型

Posted

技术标签:

【中文标题】QML TableView 鼠标区域不会将点击传播到选择模型【英文标题】:QML TableView Mouse area does not propagate click to selection model 【发布时间】: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
    

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

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

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

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

【讨论】:

以上是关于QML TableView 鼠标区域不会将点击传播到选择模型的主要内容,如果未能解决你的问题,请参考以下文章

如何在鼠标事件上更改 QML 的 TableView 中一行的颜色?

Qt QML - 在 QML 中识别超出鼠标区域范围

QML:鼠标区域重叠的问题

QML:是不是可以更改鼠标区域的长持续时间

如何将鼠标滚轮滚动添加到垂直滚动条或滚动区域?

如何在 QML 中模拟鼠标点击?