Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何获取与QML中表视图中单击的行关联的ListElement?_Qt_Qml - Fatal编程技术网

Qt 如何获取与QML中表视图中单击的行关联的ListElement?

Qt 如何获取与QML中表视图中单击的行关联的ListElement?,qt,qml,Qt,Qml,我在QML中定义了一个TableView,它显然有多行由ListModel填充 我想获取与双击的行关联的liselement 我将表视图的rowDelegate定义为: rowDelegate: Rectangle { color: "#D3D3D3" height: 30 MouseArea { anchors.fill: parent onDoubleClicked: { console.log("table v

我在QML中定义了一个
TableView
,它显然有多行由
ListModel
填充

我想获取与双击的行关联的
liselement

我将表视图的
rowDelegate
定义为:

rowDelegate: Rectangle {
    color: "#D3D3D3"
    height: 30
    MouseArea {
        anchors.fill: parent
        onDoubleClicked: {
            console.log("table view row clicked...")
            // How to fetch the ListElement associated with the row
            // and return it for use by another module?
        }
    }
}

我的评论非常强调我要寻找的内容。

在您的委托范围内,您可以使用
模型
伪属性来获取关联的
列表元素
(或通过该委托显示的任何其他数据)。您可以将其视为对原始数据项的引用。它具有
列表元素
的所有属性(例如
文本
颜色
或其他任何属性)以及
索引
属性(列表模型或任何其他模型中的项目索引)。

在代理的范围内,您可以使用
模型
伪属性来获取关联的
列表元素
(或通过该代理显示的任何其他数据段)。您可以将其视为对原始数据项的引用。它具有
列表元素
的所有属性(例如
文本
颜色
或其他任何属性)以及
索引
属性(列表模型或任何其他模型中的项目索引).

您甚至不需要
鼠标earea
来处理代理中的单击

TableView
已经有一个信号,您可以使用该信号从单击的行索引检索模型数据:

TableView {
    model: ListModel {
        ListElement {
            name: "name 1"
        }
        ListElement {
            name: "name 2"
        }
    }

    TableViewColumn {
        title: "name"
        delegate: Text {
            text: model.name
        }
    }

    rowDelegate: Rectangle {
        color: "#D3D3D3"
        height: 30
        // no MouseArea
    }

    // handle the click directly in TableView
    onDoubleClicked: {
        const element = model.get(row)
        console.error("doubleClicked on", element.name)
    }
}

您甚至不需要使用
MouseArea
来处理代理中的单击

TableView
已经有一个信号,您可以使用该信号从单击的行索引检索模型数据:

TableView {
    model: ListModel {
        ListElement {
            name: "name 1"
        }
        ListElement {
            name: "name 2"
        }
    }

    TableViewColumn {
        title: "name"
        delegate: Text {
            text: model.name
        }
    }

    rowDelegate: Rectangle {
        color: "#D3D3D3"
        height: 30
        // no MouseArea
    }

    // handle the click directly in TableView
    onDoubleClicked: {
        const element = model.get(row)
        console.error("doubleClicked on", element.name)
    }
}

从文档中-模型索引作为可访问的索引属性公开,因此您可以使用@folibis获取元素。谢谢。我如何获得单击的行的索引?似乎有一些分散的文档围绕着它,但可能只有我一个人。请看。索引公开给每个委托以及
liselement
属性。请阅读文档很好。总是从文档开始!:-)从文档开始-模型索引作为可访问的索引属性公开,因此您可以使用@folibis获取元素。但是,如何单击该行的索引?似乎有分散的文档围绕着这个,但可能只有我。看到了吗。向每个委托公开的索引以及
liselement
属性。只要好好阅读文档就行了。始终从文档开始!:-)谢谢,那正是我想要的。谢谢,那正是我想要的。