【问题标题】:Dynamically add item to StackLayout将项目动态添加到 StackLayout
【发布时间】:2021-10-31 01:07:38
【问题描述】:

我在名为 NetworkSheet 的文件中创建了一个项目。我的其他 QML 文件 (A.qml) 包含一个 StackLayout (id tabStack),我想将 NetworkSheet 添加到堆栈的后面。

由于几个不完整的示例,我正在兜圈子。有人可以建议如何做到这一点吗?我得到的最接近的是:

var stackItem = Qt.createQmlObject('import "../tabs"; NetworkSheet{}', tabStack);
tabStack.children.push(stackItem);

但是 tabStack 的孩子没有推送方法。

【问题讨论】:

  • StackView 会在您的应用中工作,而不是 StackLayout? StackView 内置了简单的推送/弹出方法。
  • 我正在使用 TabBar 来控制我的 StackLayout(模拟用户单击选项卡时的切换页面)。 StackView 可以用这个吗? (我没有看到可写的 currentIndex 属性,所以不确定它是否可以工作)
  • A TabBar 可以与 StackView 一起工作,但它不会那么简单,因为没有 currentIndex 属性。一种方法是每个 TabButton 可以有一个 onClicked 处理程序来推送您想要显示的任何页面。
  • 有趣的是,如果我只使用上面的第一行代码(删除第二行),它似乎将对象附加到堆栈上并正确显示! (只是实验)。这样做有什么问题吗?
  • 不,一点问题都没有。

标签: qt dynamic qml stacklayout


【解决方案1】:

无需将新创建的 Item 附加/插入到 StackLayout。通过在创建期间指定父级(作为 StackLayout),它会自动附加到末尾。所以只需要这一行:

var stackItem = Qt.createQmlObject('import "../tabs"; NetworkSheet{}', tabStack);

【讨论】:

    猜你喜欢
    • 2019-12-09
    • 2011-11-15
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    相关资源
    最近更新 更多