- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的目标
我想为幻灯片显示中的图像设置动画,如下所示:
<< Animation Direction <<
/* THIS IS EXPECTATION */
++++++++++++++++++++--------------------
++++++++++++++++++++--------------------
+++ CURR IMAGE +++++------ NEXT IMAGE --
++++++++++++++++++++--------------------
++++++++++++++++++++--------------------
<--- VIEW --------->
++++++++++++--------------------
++++++++++++--------------------
IMAGE +++++------ NEXT IMAGE --
++++++++++++--------------------
++++++++++++--------------------
<--- VIEW --------->
--------------------
--------------------
------ NEXT IMAGE --
--------------------
--------------------
<--- VIEW --------->
我尝试过的
QPropertyAnimation
的两个实例:
d->currImage = new QLabel(ui->frmSlideshow);
d->currImage->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
d->animCurrImage = new QPropertyAnimation(d->currImage, "geometry");
d->nextImage = new QLabel(ui->frmSlideshow);
d->nextImage->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
d->animNextImage = new QPropertyAnimation(d->nextImage, "geometry");
connect(d->animNextImage, SIGNAL(finished()),this, SLOT(applyBackground()));
connect(&(d->timer), SIGNAL(timeout()), this, SLOT(timer_timeout()));
d->timer.start(1500);
超时时,请执行以下操作:
QPixmap pixCurrImage;
pixCurrImage.load(d->currImagePath());
d->currImage->setPixmap(pixCurrImage);
QPixmap pixNextImage;
pixNextImage.load(d->nextImagePath());
d->nextImage->setPixmap(pixNextImage);
d->currImage->show();
d->currImage->raise();
d->currImage->setFixedSize(ui->frmSlideshow->size());
d->nextImage->show();
d->nextImage->raise();
d->nextImage->setFixedSize(ui->frmSlideshow->size());
d->animCurrImage->setDuration(500);
d->animCurrImage->setStartValue(QRect(0, 0, ui->frmSlideshow->width(), ui->frmSlideshow->height()));
d->animCurrImage->setEndValue(QRect(-1*ui->frmSlideshow->width(), 0, ui->frmSlideshow->width(), ui->frmSlideshow->height()));
d->animNextImage->setDuration(500);
d->animNextImage->setStartValue(QRect(2*ui->frmSlideshow->width(), 0, ui->frmSlideshow->width(), ui->frmSlideshow->height()));
d->animNextImage->setEndValue(QRect(0, 0, ui->frmSlideshow->width(), ui->frmSlideshow->height()));
QParallelAnimationGroup * group = new QParallelAnimationGroup(this);
group->addAnimation(d->animCurrImage);
group->addAnimation(d->animNextImage);
group->start();
我的问题
<< Animation Direction <<
/* THIS IS HAPPENING*/
++++++++++++ --------------------
++++++++++++ --------------------
IMAGE +++++ ------ NEXT IMAGE --
++++++++++++ --------------------
++++++++++++ --------------------
<--- VIEW --------->
+++ --------------------
+++ --------------------
+++ ------ NEXT IMAGE --
+++ --------------------
+++ --------------------
<--- VIEW --------->
--------------------
--------------------
------ NEXT IMAGE --
--------------------
--------------------
<--- VIEW --------->
如何使其按预期工作,或以其他方式实现所需的动画?
最佳答案
为了获得所需的动画,我建议您看一下我编写的小部件HorizontalSlide
库的 FlatGUI
类。
在那里,我使用 QVariantAnimation
来创建滑动效果。以下是有关动画的HorizontalSlide
的基本部分:
void HorizontalSlide::start(bool slideLeft, int speed)
{
QVariantAnimation *animation = new QVariantAnimation(this);
m_slideLeft = slideLeft;
m_labCurrent->show();
m_labNext->show();
animation->setStartValue(m_slideLeft ? 0 : m_width);
animation->setEndValue(m_slideLeft ? m_width : 0);
animation->setDuration(speed);
animation->start(QVariantAnimation::DeleteWhenStopped);
connect(animation, &QVariantAnimation::valueChanged,
this, &HorizontalSlide::onValueChanged);
connect(animation, &QVariantAnimation::finished,
this, &HorizontalSlide::onAnimationFinished);
}
void HorizontalSlide::onValueChanged(const QVariant &value)
{
int n = -value.toInt(), m = m_width + n;
if (m_slideLeft) {
m_labCurrent->move(n, 0);
m_labNext->move(m, 0);
} else {
m_labCurrent->move(m, 0);
m_labNext->move(n, 0);
}
m_parentWidget->repaint();
}
void HorizontalSlide::onAnimationFinished()
{
delete m_labCurrent;
delete m_labNext;
m_nextPage->show();
m_nextPage->resize(m_parentWidget->size());
deleteLater();
finished();
}
我使用
QVariantAnimation::valueChanged
信号
QWidget::move
小部件的快照来沿
x
-axis滑动。然后,代码对下一页的
QAbstractAnimation::finished
和
QWidget::show
的
QWidget::resize
信号使用react。
QWidgetList pages;
currentIndex(-1),
nextIndex(-1),
busy(false)
您可以在这样的方法中使用
HorizontalSlide
:
void slideToPage(int n, int speed) {
if (busy
|| pages.isEmpty()
|| (currentIndex < 0)
|| (n == currentIndex)
|| (speed < 0))
return;
auto *transition = new HorizontalSlide(this);
busy = true;
transition->setCurrentPage(pages.at(currentIndex));
transition->setNextPage(pages.at(n));
transition->start(n > currentIndex, speed);
connect(transition, &HorizontalSlide::finished,
[this, transition](){
currentIndex = pages.indexOf(transition->nextPage());
busy = false;
currentIndexChanged(currentIndex, pages.count());
currentPageChanged(pages.at(currentIndex)->windowTitle());
});
}
您不妨将库添加到项目中并使用其
SlideView
类。
关于c++ - 如何使用QpropertyAnimation制作SlideIn和SlideOut效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64085128/
我正在尝试使用 jquery ui 实现某种效果。我在屏幕的右端有一个包含链接的菜单 div。当用户单击其中一个链接时,一个 div 从页面右侧滑入并进入 View 。我正在实现这种不错的效果,但是我
从该网站加载时,我正在尝试重新创建动画: https://uchuhimo.me 我认为他们正在使用 velocity.js 来制作动画。 我尝试重新创建其中的一些并成功了(尽管不确定是否正确执行)。
我正在尝试实现某种类型的动画,但我确信我做错了。 我将从我要实现的目标开始: 我有 3 个 H2 标签元素(作为一个堆栈),第一个 H2 从左向右滑入,开始时淡入淡出,然后第二个 H2 完成相同的序列
我想要带有滑入和滑出效果的下拉菜单。它有效,但是当我悬停两次三次时,它会继续滑入和滑出取决于我悬停的次数。 Demo 1 Sub dem
我正在尝试使用 jQuery 向图像添加一些滑入/滑出描述,如 here 所述.当我将它应用到我的网站时,文本(在 中)按预期滑入,但由于某种原因,文本的背景显示在图片下方。我玩过 z-order
引用:http://www.techandall.com/demos/socialmediaicons/ 我正在尝试实现与社交图标相同的效果,但使用 Font Awesome,而不是使用图像..但我不
如何在我的回收站 View 项目上一个接一个地添加动画幻灯片。就像 Activity 开始一样,回收器 View 的列表项一项一项地滑入。我正在使用 LinearLayoutManager 并非所有内
昨天我尝试在 CSS Animation 中创建三个重叠 div 的滑入效果但失败了。尽管 Angular 提供了额外的类,但我无法实现平滑过渡。 我想实现的可以在这里看到(用 jQuery 解决):
不知道有多少人用过这个 plugin , demo 但我想要的是将插件的默认行为更改为类似 animated 的行为。目前,当您单击 next 或 previous 按钮时,将仅附加图像而没有任何视觉
在我的 slider 上隐藏背景灰色覆盖元素时遇到问题,我只有 4 个 slider ,每个 slider 都有一个从 1 到 4 的 data-slidein 值。当当前 slider 为 slid
我是一名优秀的程序员,十分优秀!