2010-06-10 73 views
1

我有一个包含各种其他小部件的QWidget。我想通过逐渐从上向下揭示它出现在屏幕上的动画效果,将它的高度从0增加到任何它的自然高度。Qt:动画QWidget的'下滚'

我有它的方式是目前:

mAnimation = new QPropertyAnimation(this, "maximumHeight"); 
mAnimation->setStartValue(0); 
mAnimation->setEndValue(400); 
mAnimation->start(); 

这有两个问题: - 当高度达到一定高度时,它崩溃了“qDrawShadeRect:参数无效”错误。 - 如果我将0更改为100,它可以正常工作,但包含在我制作的QWidget中的小部件会随着小部件动画的变化而改变它们的布局,开始非常压扁并随着它们获得更多空间逐渐分散。这看起来很丑陋!

有没有人有任何建议?

回答

0

对于崩溃,我建议抓取堆栈跟踪,并假设问题不在您的代码中,report it as a bug

对于第二种,不是将小部件完全呈现在您想要的大小不同的位置,而是将其呈现为您想要的样子。例如:

  • 使用QStackWidget两个项目:实际的小部件和所需的小部件
  • 所需的部件实际上只是一个QWidget::render()到你想要的部件是什么样子像素图。
  • 对于动画,请显示预先呈现的小部件,然后在您达到目标大小后切换。
+0

我不知道这是否仍然是最好的策略,或者是否有更好的解决方案。 – Trilarion 2014-10-28 09:51:45

1

对于第二个问题,我建议将小部件内的所有内容都包装在另一个小部件中,该部件具有固定的大小。由于小部件的剪切,这意味着小部件将在动画时显示全尺寸小部件的一部分。

+0

我以前尝试过,但无法设置内部小部件的大小。我想避免手动计算内部小部件的大小。我试图将它添加到布局以获取正确的大小,然后手动设置它,但似乎布局不会立即布置小部件,因此它返回的大小不正确。 如果我能解决这个问题,它会工作! – eAi 2010-06-11 10:40:01