【问题标题】:How to use the signal QMovie::frameChanged(int frameNumber) to emit a signal?如何使用信号 QMovie::frameChanged(int frameNumber) 发出信号?
【发布时间】:2017-07-06 01:48:00
【问题描述】:

我想在 currentFrameNumber 等于 frameCount 时使用 frameChanged(int) 发出信号,我的 QT 版本是 4.7.4

QObject::connect(movie,SIGNAL(frameChanged(int)),movie,SLOT(stop()));

QMovieChild.cpp:

class QMovieChild:public QMovie
{

signals:
void newSignal();
public slots:
    void onFrameChanged(int frameNumber){
        if(frameNumber == this->frameCount()-2)
            emit newSignal();
}
};

怪物.cpp:

void Monster::Vanishment()
{
QMovieChild *movie = new QMovieChild();
movie->setFileName("./pikaqiu.gif");
QSize size = this->getLabelPointer()->size();
movie->setScaledSize(size);
this->getLabelPointer()->setMovie(movie);
QMovie::connect(movie,SIGNAL(newSignal()),movie,SLOT(deleteLater()));
QMovie::connect(movie,SIGNAL(frameChanged(int)),movie,SLOT(onFrameChanged(int)));
movie->start();
}

【问题讨论】:

    标签: c++ qt qt4 qmovie


    【解决方案1】:

    要创建一个类应该继承自QObject的信号,如果你使用的类是QWidget,它也是有效的,因为它继承自QObject。

    #ifndef QMOVIECHILD_H
    #define QMOVIECHILD_H
    
    #include <QMovie>
    
    class QMovieChild : public QMovie
    {
        Q_OBJECT
    public:
        QMovieChild(QObject * parent = 0):QMovie(parent){
            connect(this, SIGNAL(frameChanged(int)), this, SLOT(onFrameChanged(int)));
        }
    
    signals:
        void newSignal();
    private slots:
        void onFrameChanged(int frameNumber){
            if(frameNumber == frameCount()-1){
                emit newSignal(); 
                //stop();
            }
        }
    
    };
    
    #endif // QMOVIECHILD_H
    

    用途:

    QMovieChild *movie = new QMovieChild;
    movie->setFileName("./pikaqiu.gif");
    QMovie::connect(movie,SIGNAL(newSignal()),movie,SLOT(deleteLater()));
    QSize size = getLabelPointer()->size();
    movie->setScaledSize(size);
    getLabelPointer()->setMovie(movie);
    movie->start();
    

    【讨论】:

    • QMovie 仍在循环播放。
    • 等一下,你必须做一些修改。
    • collect2: ld 返回 1 个退出状态,这是什么?
    • 如果您不分享您的代码,我将无法为您提供帮助,我向您展示的代码正在运行,我刚刚尝试过。
    • 运行make clean,然后运行qmake
    猜你喜欢
    • 1970-01-01
    • 2011-01-08
    • 2020-09-28
    • 2018-05-14
    • 1970-01-01
    • 2017-10-13
    • 2018-03-05
    • 2019-07-07
    • 1970-01-01
    相关资源
    最近更新 更多