首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不可能为QPropertyAnimation开发qobject_cast

为什么不可能为QPropertyAnimation开发qobject_cast
EN

Stack Overflow用户
提问于 2021-08-26 07:46:44
回答 1查看 16关注 0票数 0

下面是QPropertyAnimation的创建代码:

代码语言:javascript
复制
    void CustomGraphicsScene::addAnimation(AnimatedPixmapItem* item)
    {
        auto propertyAnimation = new QPropertyAnimation { item, "SpriteFrame" };
        connect(propertyAnimation, &QPropertyAnimation::destroyed, this, &CustomGraphicsScene::deleteAnimation);
        propertyAnimation->setDuration(1000);
        propertyAnimation->setStartValue(0);
        propertyAnimation->setEndValue(10);
        propertyAnimation->start(QAbstractAnimation::DeleteWhenStopped);
}

这是我尝试使用QPropertyAnimation的位置:

代码语言:javascript
复制
    void CustomGraphicsScene::deleteAnimation()
    {
        auto propertyAnimation = qobject_cast<QPropertyAnimation*>(sender());
        if (propertyAnimation) { // Always false
            // Some code
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-26 22:20:04

qobject_cast不仅执行强制转换,还使用QMetaObject验证QObject是否仍然有效,例如,如果在构建对象时打印propertyAnimation->metaObject()->className();,它将返回QPropertyAnimation,但在与已销毁的sender()->metaObject()->className()相关联的插槽中,它将返回QObject

我的建议是使用finished,更改删除策略并在插槽中删除它。

代码语言:javascript
复制
void CustomGraphicsScene::addAnimation(AnimatedPixmapItem* item)
{
        auto propertyAnimation = new QPropertyAnimation { item, "SpriteFrame" };
        connect(propertyAnimation, &QPropertyAnimation::finished, this, &CustomGraphicsScene::finishAnimation);
        propertyAnimation->setDuration(1000);
        propertyAnimation->setStartValue(0);
        propertyAnimation->setEndValue(10);
        propertyAnimation->start(QAbstractAnimation::KeepWhenStopped);
}

void CustomGraphicsScene::finishAnimation()
{
    auto propertyAnimation = qobject_cast<QPropertyAnimation*>(sender());
    if (propertyAnimation) { // Always false
        // Some code
        propertyAnimation->deleteLater();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68934546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档