QML - 2 个动态创建的元素之间的交互

标签 qml dynamically-generated qt5 qtquick2

在论坛的帮助下,我动态创建了一些按钮,我将这些按钮分配给“createObject()”函数中的属性。现在,在这个函数中,我想引用其他也是动态的项目创建。

(伪)代码目前看起来像这样:

property var money_back: { '50e': 0,
                           '20e': 0,
                           '10e': 0,
                           '5e': 0,
                           '2e': 0,
                           '1e': 0,
                           '50c': 0,
                           '20c': 0,
                           '10c': 0,
                           '5c': 0,
                           '2c': 0,
                           '1c': 0 };
Row{
    id:money_row
    spacing: 5

    Component.onCompleted: {
        var button = Qt.createComponent("BubbleButton.qml");
        var selected = Qt.createComponent("ChangeText.qml");
        for (var prop in change_screen.money_back){
            selected.createObject(money_row,{
                                      "id": "selected_"+prop,
                                      "selected": "0"
                                    });
            button.createObject(money_row,{
                                            "id": "button_"+prop,
                                            // for testing purposes I wanted to make at least the first button work.. of course i want something like 'selected_+prop.selected'
                                            "action": [function(){ selected_50e.selected += 1; }], 
                                            //"ps": ps,
                                            "img_id.source": prop+".png",
                                            "img_id.align": "center",
                                            "color": "transparent"
                                        });
        }
    }

我最终想要做的是:为每个硬币/纸币创建按钮,当单击时,我想更改旁边文本的内容..就像计数器一样,我单击了多少次在按钮上。

还有比在路上有信号灯等更简单的方法吗? (看起来很复杂)

感谢您的时间和帮助 -m

最佳答案

您可以将对象实例传递给按钮操作。例如:

Component.onCompleted: {
    ...
    for (var prop in change_screen.money_back){
        var selectedObject = selected.createObject(...);
        button.createObject(money_row,{...,
                                       "action": [function(){ selectedObject.selected += 1; }], 
                                       ...});

无论如何,我建议您使用Repeater元素来动态创建如此大量的对象。

关于QML - 2 个动态创建的元素之间的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14369599/

相关文章:

qt - 可以从 Javascript 调用对象吗

用于 QNX 平台上两种不同显示的 Qt/Qml

sql - 在 TFS 2008 和 Visual Studio 2008 中使用 Team Build 时,自动为增量、夜间构建生成增量 SQL 脚本?

javascript - 如何从数据库动态更新号码

c++ - QStates 的安全 getter

c++ - QThread 与 QTimer 连接问题

dll - 获取 Qt 5 附加插件的路径

qt - 如何为动态创建的 QML 元素添加事件处理程序?

c++ - 如何在 Qt 中使用 QSyntaxHighlighter 类在 QML TextEdit 上实现富文本逻辑?

ios - 在 TableView Controller 中搜索时,与 UILabel 相比,动态创建的 UIButton 的屏幕闪烁