在 qml 中的列表视图之外的文本字段中设置列表视图中的标签中的文本

Posted

技术标签:

【中文标题】在 qml 中的列表视图之外的文本字段中设置列表视图中的标签中的文本【英文标题】:Set text in a label in a listview from a textfield outside listview in qml 【发布时间】:2021-09-24 18:45:00 【问题描述】:

我在 QML 中有以下 ListView:

ListView
    id:daylistView
    width:parent.width
    height:parent.height - eventDayLabel.height

    boundsBehavior:Flickable.StopAtBounds
    highlightRangeMode: ListView.StrictlyEnforceRange

    orientation: Qt.Vertical
    anchors.top:eventDateRow.bottom
    clip:true
    focus:true
    model: 24

    currentIndex : calendarMonth.selectedDate.getDate() === new Date().getDate()
                   && calendarMonth.selectedDate.getMonth() === new Date().getMonth()?getHour():12

    interactive: true

    delegate: Item

            id:hourItem
            property var hourTime:hourweeklistviewLabel
            width: daylistView.width
            height: 60

            MouseArea
                anchors.fill:parent
                onClicked:
                    windowLoader.active =true
                    daylistView.currentIndex=index
                
            

            Rectangle 
                z:4
               id:hourdaylistviewindexLine
               y:getdayMinute()

               width:hourItem.width
               height:2
               border.color: calendarMonth.selectedDate.getDate()===new Date().getDate()
                             && getHour() === hourweeklistviewLabel.text
                             && calendarMonth.selectedDate.getMonth() === new Date().getMonth()
                             ?"red" : "transparent"

               border.width:1

            
            Rectangle 
               z:4
               id:hourline
               anchors.verticalCenter: daylistView
               width:daylistView.width
               height:2
               border.color: "lightgray"

               border.width:1

            

            Label
               z:4
               id:hourweeklistviewLabel
               anchors.verticalCenter: parent

               text:['00','01','02','03',
                   '04','05','06','07','08','09','10','11','12','13',
                       '14','15','16','17','18','19','20','21','22','23'][index]
               color: getHour() === hourweeklistviewLabel.text
                      && calendarMonth.selectedDate.getDate() === new Date().getDate()
                      && calendarMonth.selectedDate.getDay() === new Date().getDay()
                      ? systemPalette.highlight : "lightgray"

            
            Label
                z:4
                id:notesLabel
                anchors.left:hourweeklistviewLabel.right
                //text:" "
            
        
      
    

这是一个日历应用程序,其中 ListView 代表每小时时间。代表包括鼠标区域、两个矩形和两个标签。一个标签是只读的。在另一个标签中,我想从 TextInput 设置文本,在 ListView 之外,从另一个窗口。更多的目标是在特定时间显示标签,这意味着在 ListView 的特定行中。直到现在我设法获得 currentItem 小时,但我无法在在 currentIndex 中的 ListView 中添加标签,虽然我尝试了很多我在网上找到的建议方法。如果我找到一种方法来设置 currenItem Label 中的文本,那么我可以选择在 Listview 中的任何其他索引中设置它。

【问题讨论】:

您的问题不清楚。您是否只想在 Label 上设置文本,如果它是 currentItem? 只需将委托中的某些内容绑定到您在 ListView 正文中创建的属性。您应该知道 ListView 将在您滚动时删除和创建委托。所以你的代表不应该自己保存他们的状态,你必须在代表之外的地方保存他们的状态。 @JarMan 是的,我只想在 Label 上设置文本,前提是它是 currentItem。 这是你想要的吗? text: (index === currentIndex) ? "current item" : "not current item" @JarMar 否。正如我所说,我想从TextInputtext:"Hello " 属性之外的ListView 设置notesLabel.text 【参考方案1】:

正如@SoheilArmin 评论,解决方案在于将标签文本绑定到属性。在 ListView 代码中:

  delegate: Item

        id:hourItem
        property var hourTime:hourweeklistviewLabel

        **property var notetaking: notesLabel**

        width: daylistView.width
        height: 60

设置property var notetaking: notesLabel

然后在TextField中:

  TextField 
            id:title
            x:50
            y:20
            placeholderText :'Enter Note'
            text:daylistView.currentItem.notetaking.text
        

设置text:daylistView.currentItem.notetaking.text

因此,我们有一个双向绑定。 还定义一个按钮,以便可以将文本设置为标签:

Button 
                        id: button
                        text: qsTr("Add Note")
                        anchors.centerIn:parent

                        onClicked: 
                                 if (title.text !=="")daylistView.currentItem.notetaking.text= title.text
                                 else

                        
                    

【讨论】:

以上是关于在 qml 中的列表视图之外的文本字段中设置列表视图中的标签中的文本的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 列表中设置 NavigationLink

在 SelectList 中设置自定义文本字段

在列表视图 Android 应用程序中设置图像的问题

如何在 play 2.4 中的 scala 模板中设置类型列表字段的值?

Extjs 小部件标签字段无法在远程存储列表中设置选定值

如何专注于表格视图中视图之外的文本字段?