[英]Passing QLabel as parameter Qt C++
我有一个GIF动画,它在QLabel
带有QMovie
动画,我希望在GIF动画完成后删除Qlabel
。 我尝试了这个,但是不起作用:
QMovie *movie = new QMovie("countdown.gif");
QLabel *processLabel = new QLabel(this);
processLabel->setMovie(movie);
movie->start();
QTimer::singleShot(1000, this, SLOT(movie_finished(backgroundLabel)));
这是我的功能:
void movie_finished(QLabel *processLabel){
processLabel->deleteLater();
}
基本的误解,这是非法的:
QTimer::singleShot(1000, this, SLOT(movie_finished(backgroundLabel)));
您不能将这样的参数提供给连接。 只需输入SLOT
,如下所示:
QTimer::singleShot(1000, this, SLOT(movie_finished(QLabel*)));
有(至少)三种解决方法。 首先从插槽中删除QLabel*
参数。 然后:
sender()
方法(但这通常被认为很丑陋,破坏了封装,并且QSignalMapper是首选)。 这里实际上并不需要使用QTimer来同步电影的结尾。
实现此目的的最简单方法是让电影在完成后删除标签:
connect(movie, SIGNAL(finished()), processLabel, SLOT(deleteLater()));
finished()
,QMovie将发出finish finished()
。 因此,只需将其连接到QLabel的deleteLater()
插槽即可。
由于这可能会使您在删除QLabel时泄漏QMovie,因此您可能希望将其作为QLabel的父项,因为将其设置为电影并不意味着QLabel实际上会对其进行清理。
QLabel *processLabel = new QLabel(this);
QMovie *movie = new QMovie("countdown.gif");
movie->setParent(processLabel);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.