如何将焦点设置到 ListView 委托内的 TextField?

Posted

技术标签:

【中文标题】如何将焦点设置到 ListView 委托内的 TextField?【英文标题】:How to set focus to TextField inside ListView delegate? 【发布时间】:2019-11-24 00:41:40 【问题描述】:

我有 ListView,里面有一些文本输入字段:

Window 
    visible: true

    ListModel 
        id: textModel
        ListElement 
            text: "Bill Smith"
        
        ListElement 
            text: "John Brown"
        
        ListElement 
            text: "Sam Wise"
        
    

    ListView 
        width: 180; height: 200
        focus: true

        model: textModel
        delegate: RowLayout
            id: layout
            Label 
                text: model.text
            
            TextField 
                text: model.text
            
        
    

我想将输入焦点设置到列表中的第一个 TextField。我怎样才能做到这一点?如果我在 ListView 中添加 focus: true 则无济于事。

【问题讨论】:

【参考方案1】:

您必须使用 ListView.isCurrentItem 属性激活 TextField 的焦点:

ListView 
    id: view
    width: 180; height: 200
    focus: true
    model: textModel
    delegate: RowLayout
        id: layout
        Label 
            text: model.text
        
        TextField 
            focus: layout.ListView.isCurrentItem
            text: model.text
        
    
    // Component.onCompleted: view.currentIndex = 0

【讨论】:

谢谢,这个解决方案有效。我尝试其他解决方案: focus: model.index == 0 并且它不起作用。我不明白为什么。

以上是关于如何将焦点设置到 ListView 委托内的 TextField?的主要内容,如果未能解决你的问题,请参考以下文章

ListView 内的 EditText 不会保持焦点[重复]

如何在引导模式内的kendo-ui网格输入上设置输入焦点

单击ListViewItem时如何将焦点设置在TextBox上?

如何在 TabCtrl 内的子对话框中将焦点设置为 CEdit?

从 C++ 更改 QML Listview 委托

如何防止滚动到焦点 EditText [重复]