Предположим, у меня есть QPropertyAnimator
анимационный (движущийся), скажем, кнопка - немного влево в течение 10 секунд.Как использовать сигнал для выполнения любой функции с аргументами?
Когда кнопка достигает своего пункта назначения на другой стороне окна, она должна изменить свой текст на «банан», используя функцию 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")));
Но так как вы не можете передать аргумент в слот, который не будет работать.
Как изменить текст после завершения анимации без создания различных «прокси» функций (слотов), чтобы сделать это без аргументов?
Если вы используете C++ 11, вы могли бы добиться этого с лямбды. Здесь приведен пример: https://wiki.qt.io/New_Signal_Slot_Syntax#Connecting_in_Qt5 – MrEricSir
Использование необходимо использовать lambdas C++ 11 или вспомогательные слоты, нет прямого способа привязать значения аргументов к вызову слота, когда вы пытаетесь , –
Где бы я «положил» лямбду в приведенном выше примере - как бы я ее использовал? EDIT: Разве это не очень важная функциональность? Неужели люди все это делают намного лучше, чем я полностью теряю? – Quoi