Qt:动画QWidget的“下滚”动画

时间:2010-06-10 16:28:11

标签: c++ qt animation qt4 qt4.6

我有一个包含各种其他小部件的QWidget。我希望通过从上到下逐渐显示它来将它显示在屏幕上的动画,将它的高度从0增加到任何它的自然高度。

我目前的方式是:

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

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

有人有任何建议吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

对于第二种情况,不是将窗口小部件精确地渲染到不同大小的位置,而是按照您希望的方式呈现它。例如:

  • 使用包含两个项目的QStackWidget:实际窗口小部件和所需窗口小部件
  • 所需的小部件实际上只是一个QWidget::render()到像素图的小部件,你想要小部件的样子。
  • 对于动画,显示预渲染的小部件,然后在达到目标大小后再切换。