我一直在搜索QT中的线程以及根据文档同时处理多个事件的方法,只有主GUI线程可以管理GUI相关事件。所以我的问题是:在执行过程中是否可以同时移动多个标签或对象?我试图为学校创建一种模拟项目。
我现在拥有的是:每次运行该功能时都会创建一个标签,因此我需要将该标签移动到某个位置。问题是因为我需要多次执行该功能,当它再次执行时,前一个标签停止并移动新标签。完成后,它会回到上一个。
感谢任何帮助。
一般在这里问及QT。
编辑:
以下是我的功能:
QLabel *cliente = new QLabel(this);
QPixmap pix("image.jpg");
cliente->setGeometry(10,50,128,128);
cliente->setPixmap(pix);
cliente->show();
int speed = 100;
while (cliente->x()<300){
QTime dieTime = QTime::currentTime().addMSecs(speed);
while (QTime::currentTime() < dieTime){
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
cliente->move(cliente->x()+10,cliente->y());
}
答案 0 :(得分:2)
要处理小部件的移动,最好使用QPropertyAnimation
类,但如果要处理并行组动画,则使用QParallelAnimationGroup
是合适的,如下例所示: / p>
#include <QApplication>
#include <QLabel>
#include <QParallelAnimationGroup>
#include <QPropertyAnimation>
#include <QWidget>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
w.resize(500, 550);
QParallelAnimationGroup group;
for(int i = 0; i < 10; i++){
QLabel *label = new QLabel(QString("label %1").arg(i), &w);
QPropertyAnimation *animation = new QPropertyAnimation(label, "pos");
animation->setDuration(1000);
animation->setStartValue(QPoint(50*i, 0));
animation->setEndValue(QPoint(50*i, 50*(i+1)));
group.addAnimation(animation);
}
group.start();
w.show();
return a.exec();
}
输出: