【问题标题】:QT5: Instantiate the same QML components multiple timesQT5:多次实例化相同的 QML 组件
【发布时间】:2018-09-15 17:37:59
【问题描述】:

我想创建组件模板,这意味着我在一个单独的 QML 文件中定义了我自己的 MyButton 类型,并且我还想定义几个单例实例,例如:

Predefined.qml:
pragma Singleton
[...]

property MyButton quitButton : quitButtonItem 
MyButton {
    id: quitButtonItem
    text: qsTr("Quit")
    imagesource : "qrc:/icons/quit.png"
}

然后将其用作:

Predefined { id: predefined }

Rectangle {
    predefined.quitButton {
        onClicked: console.log ("quit pressed.");
        anchors.bottom : parent.bottom
        anchors.horizontalCenter : parent.horizontalCenter
    }
}

a.) 我不想为此使用 Loaders -> 矫枉过正 b.) 不想将我想要的组件定义为我的 QML 文件 克隆(例如 QuitButton.qml、BackButtonQml 等)

知道怎么做吗? 谢谢

【问题讨论】:

  • 什么都不说。定义自定义组件的操作与您在 Predefined.qml 中执行的操作相同。要实例化这种类型的新项目,您不需要Loader。缺乏对基础知识的理解会导致此类错误。

标签: qml qt5


【解决方案1】:

做不到。

在没有Loader 的情况下从 QML 以声明方式实例化对象的唯一方法是为每个组件创建一个新文件。

我对您的用例的建议只是创建文件。 或者,您似乎正在做某种导航栏。将其统一到一个组件中怎么样?

我看到了两种方法:为您的所有应用设置一个全局导航栏,例如在ApplicationWindowheader 中,或者在您实现栏的位置使用像YourPage.qml 这样的通用基本类型,然后简单地继承从中获取您的实际内容。 就个人而言,我采用了第一个解决方案。

【讨论】:

  • 实际上我为不同的按钮类型创建了单独的文件。这实际上不是一个工具栏,我只是想确保整个应用程序中的“后退”按钮是相同的后退按钮(样式为“极端”之类的东西)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
相关资源
最近更新 更多