【问题标题】:How to send a signal to all element of a listView from one of these element如何从这些元素之一向 listView 的所有元素发送信号
【发布时间】:2017-05-16 12:10:37
【问题描述】:

我使用ListView 并尝试将signal 发送到我所有的Elements ListView

Signal 必须由ListView's Element 之一发送

我试过了,但只有发送 Element 捕获 Signal

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0

ApplicationWindow {
    id: window
    visible: true
    width: 640
    height: 480

    ListModel {
        id: modelList
        ListElement {
            name: "Bill Smith"
        }
        ListElement {
            name: "John Brown"    
        }
        ListElement {
            name: "Sam Wise"
        }
    }

    ListView {
        width: window.width
        height: window.height    
        model: modelList
        delegate: Rectangle {
            id:elem
            signal activated()    
            width: window.width
            height: window.height/10
            color: "red"    
            Button {
                text: name
                anchors{
                    right: parent.right
                    top: parent.top
                    bottom: parent.bottom
                    margins: 10
                }
                onClicked: {
                    elem.activated()
                }
            }
            onActivated: {
                console.log("test")
            }
        }
    }
}

我想我误解了文档,但我很难为这种情况找到一个好的例子,知道吗?

【问题讨论】:

  • 您可能会对ButtonGroup 感兴趣,具体取决于您的需要。

标签: qt listview qml qtquick2


【解决方案1】:

您可以在 ListView 的父级(例如 ApplicationWindow )中定义一个信号,并在委托中编写一个信号处理程序并将其连接到父级中定义的信号

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0

ApplicationWindow {
    id: window
    visible: true
    width: 640
    height: 480

    signal someSignal(int arg);

    ListModel {
        id: modelList
        ListElement {
            name: "Bill Smith"
        }
        ListElement {
            name: "John Brown"    
        }
        ListElement {
            name: "Sam Wise"
        }
    }

    ListView {
        width: window.width
        height: window.height    
        model: modelList
        delegate: Rectangle {
            id:elem
            signal activated()    
            width: window.width
            height: window.height/10
            color: "red"
            Connections{
                target: window
                onSomeSignal: {
                     console.log("Argument: " + arg);
                }
            } 
            Button {
                text: name
                anchors{
                    right: parent.right
                    top: parent.top
                    bottom: parent.bottom
                    margins: 10
                }
                onClicked: {
                    window.someSignal(1);
                }
            }
            onActivated: {
                console.log("test")
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多