- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用多个 QPropertyAnimation 向上移动一个小部件,然后向右移动。
代码如下:
QPropertyAnimation* animationUp;
QPropertyAnimation* animationRight;
QSequentialAnimationGroup *group;
animationUp = new QPropertyAnimation(this->ui->pushButton_2, "geometry");
animationUp->setStartValue(QRect(this->ui->pushButton_2->pos().x(), this->ui->pushButton_2->pos().y(), buttonWidth, buttonHeight));
animationUp->setEndValue(QRect(this->ui->pushButton_2->pos().x(), this->ui->pushButton_2->pos().y() - 60, buttonWidth, buttonHeight));
animationRight = new QPropertyAnimation(this->ui->pushButton_2, "geometry");
animationRight->setStartValue(QRect(this->ui->pushButton_2->pos().x(), this->ui->pushButton_2->pos().y(), buttonWidth, buttonHeight));
animationRight->setEndValue(QRect(this->ui->pushButton_2->pos().x() + 60, this->ui->pushButton_2->pos().y(), buttonWidth, buttonHeight));
group = new QSequentialAnimationGroup;
group->addAnimation(animationUp);
group->addAnimation(animationRight);
group->start();
问题很简单,小部件将向上移动,然后从起始位置向右移动,而不是从向上移动后的位置向右移动。我希望它从最后一个位置向上移动,而不是从起始位置开始。
编辑:
对于我提出的问题,@eyllanesc 的回答很好,但我应该更精确地说明我打算做什么。向上和向右动画只是一个测试,我的目标是能够向上、向下、向左或向右移动按钮,并可能在同一方向上进行多次移动。例如,它可能是这样的:
group->addAnimation(animationUp);
group->addAnimation(animationUp);
group->addAnimation(animationUp);
group->addAnimation(animationRight);
group->addAnimation(animationDown);
group->addAnimation(animationLeft);
group->addAnimation(animationLeft);
group->start();
在这种情况下,答案不再有效。我尝试了 2 种设置并遇到了不同的问题:
//Setting 1 : Only one of the Up animation is showed, the other is ignored
group->addAnimation(animationUp);
group->addAnimation(animationUp);
group->addAnimation(animationRight);
//Setting 2 : Up and Right working fine but the last Up starts from the starting position
group->addAnimation(animationUp);
group->addAnimation(animationRight);
group->addAnimation(animationUp);
最佳答案
问题是您要根据按钮的初始位置分配位置,您必须创建一个 QRect
变量并使用 translate()
QPropertyAnimation* animationUp;
QPropertyAnimation* animationRight;
QSequentialAnimationGroup *group;
QRect r(ui->pushButton_2->pos(), QSize(buttonWidth, buttonHeight));
animationUp = new QPropertyAnimation(ui->pushButton_2, "geometry");
animationUp->setStartValue(r);
r.translate(0, -60);
animationUp->setEndValue(r);
animationRight = new QPropertyAnimation(ui->pushButton_2, "geometry");
animationRight->setStartValue(r);
r.translate(60, 0);
animationRight->setEndValue(r);
group = new QSequentialAnimationGroup;
group->addAnimation(animationUp);
group->addAnimation(animationRight);
group->start();
此外,如果您不打算更改按钮的大小,您可以使用位置而不是几何图形。
ui->pushButton_2->resize(buttonWidth, buttonHeight);
QPropertyAnimation* animationUp;
QPropertyAnimation* animationRight;
QSequentialAnimationGroup *group;
QPoint p = ui->pushButton_2->pos();
animationUp = new QPropertyAnimation(ui->pushButton_2, "pos");
animationUp->setStartValue(p);
p += QPoint(0, -60);
animationUp->setEndValue(p);
animationRight = new QPropertyAnimation(ui->pushButton_2, "pos");
animationRight->setStartValue(p);
p += QPoint(60, 0);
animationRight->setEndValue(p);
group = new QSequentialAnimationGroup;
group->addAnimation(animationUp);
group->addAnimation(animationRight);
group->start();
更新:一个简单的方法是通过放置可能的 Action 来创建一个枚举并创建一个新的动画,动画不引用以前的状态。
enum Movements{ Up, Down,Right, Left};
const auto dir = QList<QPoint>()<< QPoint(0, -1) << QPoint(0, 1)<<QPoint(1, 0)<<QPoint(-1, 0);
ui->pushButton_2->resize(buttonWidth, buttonHeight);
auto group = new QSequentialAnimationGroup;
QList<Movements> Sequence_of_movements;
Sequence_of_movements << Up << Up << Up << Right<<Down<<Left<<Left;
auto p = ui->pushButton_2->pos();
int step = 60;
for(auto i: Sequence_of_movements){
auto animation = new QPropertyAnimation(ui->pushButton_2, "pos");
animation->setStartValue(p);
p += step*dir.at(i);
animation->setEndValue(p);
group->addAnimation(animation);
}
group->start();
关于c++ - QPropertyAnimation 没有保存小部件的最后位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44220986/
我正在尝试在 Qt 桌面应用程序中测试动画。我刚刚从帮助中复制了示例。单击按钮后,新按钮仅出现在左上角,没有动画(甚至结束位置也是错误的)。我错过了什么吗? Qt 5.0.1、Linux Mint 6
我正在设置一个新的桌面小部件,以使我的工作生活更轻松,并使用 QPropertyAnimation 使其变得漂亮。淡入淡出应用程序似乎不想起作用,并且以典型的编码方式,它使我的进度陷入停滞。 我正在个
我想让许多彩色点在背景上不断移动。 (下面的代码说明):PolkaDot 小部件是用随机颜色、大小、位置和持续时间构建的。 QPropertyAnimation 在屏幕上从左到右移动小部件,并在动画结
我的动画在这个 QPushButton 上没有按照我预期的方式工作。 这是我的 mainwindow.cpp,因为您在这里看不到任何特别奇怪的地方。在运行时,该按钮如人们所期望的那样出现。我没有任何特
我正在尝试使用多个 QPropertyAnimation 向上移动一个小部件,然后向右移动。 代码如下: QPropertyAnimation* animationUp; QPropertyAnima
这是我的代码: void Widget::update() { if (a==1) { QPushButton button("Animated Button");
我正在尝试使用 Qt 的动画框架。我正在使用 Qt 网站上的一些示例代码,但它无法正常工作,错误:setGeometryDp: 无法在 QWidgetWindow/'QPushButtonClassW
下面的代码没有按预期为按钮设置动画。但如果按钮是独立的并且在它是子部件时停止工作,它会起作用。我在这里做错了什么? 我正在 Ubuntu 上尝试这个。 class TestWindow(QtGui.Q
我正在学习 Qt,认为动画按钮很重要。我正在尝试创建我的自定义 QPushButton 类,它重新实现鼠标进入和离开事件并使用 qt 动画框架。 QPropertyAnimation QPropert
Qt 4.6+ 中的新动画框架基于具有“void setUpdateInterval(int interval)”公共(public)函数的 QTimeLine。基于 QTimeLine,QGraph
我有以下问题:我想使用 QPropertyAnimation 调整窗口大小,以便看起来不错,但是在调整大小时窗口也会立即移动,虽然我不想这样做,但我只想调整窗口大小和不改变其位置值。 所以,这是我的代
我试图在按下按钮时生成动画,但在 self.frame2 返回到大小 0 后它不起作用: 这是一个例子: 帧返回0后,动画不再执行: from PyQt5.QtWidgets import QMain
尝试使用 PyQt5 并使用 QPropertyAnimation 对一条从无到有 (0,0) 到 (200, 200) 的线进行动画处理。我已经阅读了大量有关 Qt 的文档并尝试了几个示例,但我就是
根据以下代码片段,我对QPropertyAnimation 和QParallelAnimationGroup 有疑问: // Create the opacity animation QPropert
我面临一个非常严重的情况。通过写这个问题,我希望真正的专业人士对我将要描述的问题发表意见。我在 https://bugreports.qt.io/ 中报告了一个错误: I have created Q
问题是当我调用QPropertyAnimation.start()时,什么也没发生。 颜色是我要设置动画的属性,按钮是类。 class Button(QPushButton): def __i
请参阅下面的代码。我有一个启动动画的按钮。问题是我只在按下第二个按钮后才看到动画。但是当动画开始时,我注意到它实际上从第一次按下按钮开始就开始了,因为它从一个时刻开始 = [第 1 次和第 2 次按钮
我创建了一个 QRect 对象 QRect ellipse(10.0 , 10.0 , 10.0 , 10.0); QPainter painter(this); painter.setBrush(Q
1。简介 我在 Windows 10 上使用 Python 3.7 并使用 PyQt5 作为 GUI。在我的应用程序中,我得到了一个 QScrollArea()里面有一排按钮。单击时,按钮必须移出该区
我想在 2 秒的时间内逐渐降低 QPushButton 的不透明度以完全透明。为此,我使用了 QPropertyAnimation 类并使用按钮的属性“windowOpacity”来实现效果。但这仅适
我是一名优秀的程序员,十分优秀!