QT C ++:同时移动多个标签

时间:2017-10-02 15:54:34

标签: c++ qt qt5

我一直在搜索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());

    }

1 个答案:

答案 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();
}

输出:

enter image description here