c – Qt中的动画绑定变化

c – Qt中的动画绑定变化,第1张

概述当绑定发生变化时,我正试图找到一种在QML元素上进行转换的方法.假设您有一个Text元素,text属性绑定到某个东西.我想要的是当绑定中的数据发生变化时,元素淡出(仍显示旧数据),切换并淡入新数据(当元素不可见时发生实际转换.) 我一直在寻找一种方法来做到这一点,但我可以搞清楚.我已尝试在QML中使用Qt Quick动画,但数据本身在动画运行之前发生了变化,不再需要动画.我已经尝试创建一个自定义的 当绑定发生变化时,我正试图找到一种在QML元素上进行转换的方法.假设您有一个Text元素,text属性绑定到某个东西.我想要的是当绑定中的数据发生变化时,元素淡出(仍显示旧数据),切换并淡入新数据(当元素不可见时发生实际转换.)

我一直在寻找一种方法来做到这一点,但我可以搞清楚.我已尝试在QML中使用Qt Quick动画,但数据本身在动画运行之前发生了变化,不再需要动画.我已经尝试创建一个自定义的QDeclarativeItem对象,该对象在QDeclarativeItem :: paint()中调用动画,但我无法弄清楚如何让它实际运行.

我应该在这里注意,我知道我的绑定工作正常,因为显示的数据发生了变化,我无法让这些动画在适当的时间运行.

以下是我尝试使用QML的内容:

Text {    ID: focusText    text: somedata    Behavior on text {         SequentialAnimation {             NumberAnimation { target: focusText; property: "opacity"; to: 0; duration: 500 }             NumberAnimation { target: focusText; property: "opacity"; to: 1; duration: 500 }         }     }}

这是我在实现自定义QDeclarativeItem时尝试的:

// PAINTERvoID AnimatedBinding::paint(QPainter *painter,const qstyleOptionGraphicsItem *option,QWidget *Widget) {    // Setup the pen    QPen pen(m_color,2);    painter->setPen(pen);    painter->setopacity(this->opacity());    // Draw the item    if (m_bindingType == QString("text")) {        QPropertyAnimation animation(this,"opacity");        animation.setDuration(1000);        animation.setStartValue(1);        if (drawn) {            animation.setStartValue(1);            animation.setEndValue(0);            animation.start();        } else drawn = true;        painter->drawText(boundingRect(),m_data.toString());        animation.setEndValue(0);        animation.start();    } else {        qCritical() << "Error unkNown binding type!";        return;    }}

但就像我说的那样,我在画家中开始的动画从未实际发射过.

有小费吗?有没有人曾经这样做过?我一直在敲打这个约一个星期.

解决方法 如何在qml中这样做:

>定义您自己类型的自定义元素,其行为方式与您希望的一样.
>使用此元素代替传统元素进行动画处理.

例如.我创建了一个自定义的’AnimatedText’类型,以便在文本元素相关的文本发生变化时,对文本元素进行淡入和淡出行为.

文件1:AnimatedText.qml

import QtQuick 1.0Item{    ID: topParent    property string aText: ""    property string aTextcolor: "black"    property int aTextFontSize: 10    property int aTextAnimationTime : 1000    Behavior on opacity { NumberAnimation { duration: aTextAnimationTime } }    onATextChanged:    {         topParent.opacity = 0         junkTimer.running = true    }    Timer    {       ID: junkTimer       running: false       repeat: false       interval: aTextAnimationTime       onTriggered:       {           junkText.text = aText           topParent.opacity = 1       }    }    Text    {        ID: junkText        anchors.centerIn: parent        text: ""        Font.pixelSize: aTextFontSize        color: aTextcolor    }}

在你的main.qml中

import QtQuick 1.0Rectangle{    ID: topParent    wIDth:  360    height: 360    AnimatedText    {      ID: someText      anchors.centerIn: parent      aText: "Click Me to change!!!.."      aTextFontSize: 25      aTextcolor: "green"      aTextAnimationTime: 500    }    MouseArea    {        anchors.fill: parent        onClicked:        {            someText.aText = "Some random junk"        }    }}
总结

以上是内存溢出为你收集整理的c – Qt中的动画绑定变化全部内容,希望文章能够帮你解决c – Qt中的动画绑定变化所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230747.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存