2015-03-13 70 views
0

QDialog有许多函数可以打开和关闭,如open(),show(),exec(),close(),hide()。我不知道要重新实现哪个函数()。实现模态QDialog的淡入/淡出

//编辑: 在showEvent()函数中启动动画是个不错的选择。

回答

3

简短的回答:void exec()

长回答:void exec()

你需要决定要如何“淡入”的工作,并获得如何使用QPropertyAnimation

例如,你可以改变对话框的不透明度:

#include <QPropertyAnimation> 
int MyDialog::exec() 
{ 
    this->setWindowOpacity(0.0); 
    QPropertyAnimation* anim = new QPropertyAnimation(this, "windowOpacity"); 
    anim->setDuration(5000); // will take 5 seconds 
    anim->setEasingCurve(QEasingCurve::OutBack); // just demonstration, there are a lot of curves to choose 
    anim->setStartValue(0.0); 
    anim->setEndValue(1.0); 
    anim->start(QAbstractAnimation::DeleteWhenStopped); 
    return QDialog::exec(); 
} 

int main(int argc, char** argv) 
{ 
    QApplication a(argc, argv); 
    MyDialog w; 

    int ret = w.exec(); 
    return a.exec(); 
} 

您可以通过动画的QObject定义的任何Property ,其他一切都玩不同的动画和持续时间

编辑:适用于使用QDialog::exec(),在Qt4.8.5,VS2008,Win7Professionalx64 欢呼

+3

注意测试,即改变windowOpacity财产不能在所有平台上工作。 – vahancho 2015-03-13 12:24:47

+0

相关知识,谢谢 – Zaiborg 2015-03-13 12:44:58

+0

如果我调用dialog-> exec(),show()不起作用。 – Nya 2015-03-13 12:48:44