在 qml ui 表单中使用行为

Posted

技术标签:

【中文标题】在 qml ui 表单中使用行为【英文标题】:Using behavior in qml ui form 【发布时间】:2017-08-09 13:11:16 【问题描述】:

有没有办法使用项目外部的行为? (QtQuick 设计器不支持行为)。

假设我在 From.ui.qml 中定义了一个矩形,然后在文件 Form.qml 中定义了一个 id rec,我想在 rec 的 x 属性上分配一个行为,我该怎么做?

【问题讨论】:

您在From.ui.qml 的根元素中公开了recx 属性。然后你可以在这个暴露的属性上定义一个行为。 好吧,但它也会作为公共财产公开?? 是的。这是真的。 您的解决方案可以完成这项工作,但将其公开为公共财产听起来有点糟糕。 【参考方案1】:
    步骤:使用您要更改的属性公开对象

这将在ui.qml 文件中创建一个property alias

// NewFormular.ui.qml

import QtQuick 2.4

Item 
    width: 400
    height: 400
    property alias rectangle1: rectangle1

    Rectangle 
        id: rectangle1
        x: 77
        y: 69
        width: 200
        height: 200
        color: "#ffffff"
    

    步骤:添加行为

//New.qml

import QtQuick 2.4

NewFormular 
    Behavior on rectangle1.x 
        NumberAnimation  duration: 500 
    

    Timer 
        running: true
        interval: 1000
        repeat: true
        onTriggered: rectangle1.x = (rectangle1.x + 500) % 600
    

    步骤:在您的main.qml 中实例化它

//main.qml

import QtQuick 2.7
import QtQuick.Controls 2.0

ApplicationWindow 
    id: window
    width: 800
    height: 600
    visible: true
    color: 'grey'
    New 
        anchors.fill: parent
    

如果你想再次隐藏它,你可以再次将其包裹在Item中:

//New.qml v2

import QtQuick 2.4
Item 
    id: root
    NewFormular 
        anchors.fill: parent
        Behavior on rectangle1.x 
            NumberAnimation  duration: 500 
        

        Timer 
            running: true
            interval: 1000
            repeat: true
            onTriggered: rectangle1.x = (rectangle1.x + 500) % 600
        
    

【讨论】:

好吧,我明白了,您建议我创建一个普通的 QtQuick 设计器项目,将其包装在另一个项目中并公开我想要的属性。 是的,正如documentatio 所述,Behaviors 在ui.qml-文件中不受支持,唯一的选择是在外部添加它们 - 您需要公开属性至少在ui.qml-文件中。 好的,这是唯一的解决方案,我会坚持下去。非常感谢您的帮助

以上是关于在 qml ui 表单中使用行为的主要内容,如果未能解决你的问题,请参考以下文章

Qt Quick ui 表单不支持函数

在 ui.qml 文件中的组件上添加业务逻辑

element-ui表单部分验证报错

QML 从单击的矩形缩放到另一个 UI 元素

SAP UI5 Form 表单的 Responsive Grid Layout 布局中的 breakpoint

Python 和 QML 上的多页