我想逐步显示一个自定义小部件,比如以0不透明度开始并在给定时间内变为100。是否有可能以一种简单的Qt方式为此目的而开发?或者我可以自己做吗?
干杯,
答案 0 :(得分:7)
将QGraphicsOpacityEffect
与QPropertyAnimation
一起使用会更简单,这完全是针对这样的事情而制作的。您需要做的就是将QGraphicsOpacityEffect
附加到QWidget
后代,然后将其设置为新创建的QPropertyAnimation
的目标,并使用您想要的选项运行QPropertyAnimation
!
答案 1 :(得分:3)
您可以尝试使用计时器,该计时器将逐步调整显示事件的窗口小部件的不透明度。拿这个例子(急着写):
class MyWidget: public QWidget{
public:
MyWidget(QWidget* parent) : QWidget(parent){
//setup the timer first
timer.setInterval(xxx);
connect(&timer, SIGNAL(timeOut()),this, SLOT(increaseOpacity()));
};
protected:
virtual void MyWidget::showEvent ( QShowEvent * event ){
opacity = 0;
setOpacity(opacity);
QWidget::showEvent(event);
timer.start();
}
virtual void MyWidget::hideEvent ( QHideEvent * event ){
QWidget::hideEvent(event);
timer.stop();
}
private slot:
void increaseOpacity(){
if(opacity>=1.0){
timer.stop();
}
opacity += 0.1;
setOpacity(opacity);
}
private:
Qtimer timer;
double opacity;
}
答案 2 :(得分:1)
如果您的QWidget是窗口,您可以使用:
#include <QApplication>
#include <QWidget>
#include <QPropertyAnimation>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
w.show();
QPropertyAnimation animation(&w, "windowOpacity");
animation.setDuration(10000);
animation.setStartValue(1.0);
animation.setEndValue(0.0);
animation.start();
return a.exec();
}
否则:
#include <QApplication>
#include <QWidget>
#include <QPropertyAnimation>
#include <QGraphicsOpacityEffect>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
QPushButton b(&w);
w.show();
QGraphicsOpacityEffect effect;
b.setGraphicsEffect(&effect);
QPropertyAnimation animation(&effect, "opacity");
animation.setDuration(1000);
animation.setStartValue(1.0);
animation.setEndValue(0.0);
animation.start();
return a.exec();
}
最简单的方法是使用QML来实现此目标:
import QtQuick 2.0
Rectangle {
width: 360
height: 360
Rectangle {
width: 100
height: 100
color: "red"
NumberAnimation on opacity {
from: 1.0; to: 0.0
duration: 5000
}
}
}