假设我有一个QPropertyAnimator
动画(移动),比如一个按钮 - 在10秒的时间内略微向左移动。
当按钮到达窗口另一侧的目的地时,它应将其文本更改为" banana"使用QLineEdit::setText()
函数。
如果在动画开始后直接发出QLineEdit::setText()
功能;
QPropertyAnimator *animator = new QPropertyAnimator(someButton, "pos");
animator->setDuration(10000);
animator->setStartValue(*current position of the button*);
animator->setEndValue(*current position of the button with x-100*);
animator->start();
QLineEdit::setText(QString("Banana"));
文字在有机会开始移动之前会发生变化。幸运的是,QPropertyAnimator
在动画完成时会发出一个信号 - 恰当地标题为finished()
。
有人希望能够:
connect(animator, SIGNAL(finished()), someButton, SLOT(setText("Banana")));
但是因为你不能将一个论点传递给一个不会工作的插槽。
如何在动画完成后更改文本而不创建不同的"代理"函数(槽)没有参数吗?
答案 0 :(得分:0)
正如其他人所说,你应该使用lambda,在你的情况下,
connect( animator, &QPropertyAnimator::finished, [&]()
{
m_lineEdit->setText( QString("Banana") );
} );