2015-03-13 52 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