当按下按钮时,滑块以给定速度在循环中移动的最简单方法是什么?我猜测它涉及分叉一个线程,该线程定期向滑块发送适当的信号。这样做有规范方法吗?
答案 0 :(得分:2)
这只是更新滑块在计时器上的位置的问题。因此,创建一个计时器,并在每次更新时调用QSlider::setValue。
当值达到最大值时,将其设置为最小值并继续。
QSlider* pSlider = new QSlider;
QButton * pButton = new QButton("Go");
QTimer* pTimer = nullptr; // C++ 11 nullptr
// On button click, start a timer
connect(pButton, &QButton::clicked(), [=](){
// exit if already running
if(pTimer)
return;
pTimer = new QTimer;
connect(pTimer, &QTimer::timeout, [=](){
if(pSlider->value()+1 > pSlider->maximum())
pSlider->setValue(pSlider->minimum());
else
pSlider->setValue(++pSlider->value());
});
pTimer->start(1000); // update every second
});
答案 1 :(得分:2)
我建议使用QPropertyAnimation
来完成这项工作。只需设置您想要更改值的起始值,结束值和曲线
QPropertyAnimation *animation = new QPropertyAnimation(slider,"sliderPosition");
//set the duration (how long the animation should run - will change value faster when shorter)
animation->setDuration(1000);
//set the start value - in this case check if value in range of the slider
animation->setStartValue(slider->minimum());
//same as start value
animation->setEndValue(slider->maximum());
//easingCurve defines if it goes straight or bouncing n stuff
animation->setEasingCurve(QEasingCurve::OutCubic);
// as coyote mentioned, you can loop the animation as well (credit him as well ;))
// -1 defines to run forever
animation->setLoopCount(loopCount)
animation->start();
答案 2 :(得分:1)
您可以使用QTimer
。最小的例子:
QSlider *sl = new QSlider;
QTimer *ttt = new QTimer;
sl->setValue(0);
connect(ttt,&QTimer::timeout,[=]() {
sl->setValue(sl->value() + 5);
});
sl->show();
ttt->start(500);
我在这里使用C++11
(CONFIG += c++11
到.pro
文件)和new syntax of signals and slots,但当然如果需要,您可以使用旧语法。
答案 3 :(得分:1)
我的知识没有规范的方法。
定时器在其他答案中给出,但您也可以使用animation framework,并通过调整动画的持续时间来调整速度。
您可以将loopcount设置为您希望动画运行的次数,例如1000000以使其运行很长时间。