2012-03-09 8 views
1

QSplashScreenを使用して起動イメージを表示しようとしていますが、約2秒間イメージを表示したいとします。スロットがQSplashScreenのために呼び出されていません

int main(int argc, char *argv[]) { 

    QApplication a(argc, argv); 
    QPixmap pixmap(":/images/usm.png"); 
    QSplashScreen splash(pixmap); 
    splash.show(); 
    splash.showMessage("Loading Processes"); 
    QTimer::singleShot(2000, &splash, SLOT(close())); 
    MainWindow w; 
     w.show(); 

    splash.finish(&w); 
    return a.exec(); 
} 

しかし、これは機能しません。 QSplashScreenが数ミリ秒間表示されてから消えます。期間を修正しようとしましたが、QSplashScreenオブジェクトがスロットに接続されていないようです。何が問題なのか、それを避ける方法は?

答えて

4

あなたのコードに問題がスプラッシュ画面がすでにsplash.finish(&w)コールで閉じたように、タイマーが実行をブロックしていないことです。あなたが必要とするのは睡眠です。あなたは、このようなQWaitConditionを使用することができます。

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QSplashScreen splash(QPixmap(":/images/usm.png")); 
    splash.show(); 
    splash.showMessage("Loading Processes"); 

    // Wait for 2 seconds 
    QMutex dummyMutex; 
    dummyMutex.lock(); 
    QWaitCondition waitCondition; 
    waitCondition.wait(&dummyMutex, 2000); 

    MainWindow w; 
    w.show(); 

    splash.finish(&w); 
    return a.exec(); 
} 

この方法の欠点は、あなたが実行をブロックしているということです。あなたはそれをブロックしたくない場合は、単にを削除することができsplash.finish(&w)コール:

int main(int argc, char *argv[]) { 

    QApplication a(argc, argv); 
    QPixmap pixmap(":/images/usm.png"); 
    QSplashScreen splash(pixmap); 
    splash.show(); 
    splash.showMessage("Loading Processes"); 
    QTimer::singleShot(2000, &splash, SLOT(close())); 
    MainWindow w; 
    w.show(); 
    return a.exec(); 
} 
+0

2番目のメソッドは優れています.. thxたくさん – develoops

+0

MainWindowを初期化が完了したらシグナルを出し、スプラッシュ画面に接続します。 –

1

このコードは動作するはずです:

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    QSplashScreen splash(QPixmap(":/images/usm.png")); 
    splash.showMessage("Loading Processes"); 
    splash->show(); 

    QMainWindow w; 

    QTimer::singleShot(2000, splash, SLOT(close())); 
    QTimer::singleShot(2500, &w, SLOT(show())); 

    return a.exec(); 
} 
+0

はQTimerはイベントループに依存していませんか? a.exec()の前には何も起動していません... – Koying

+0

よくメインウィンドウが表示されますが、QSplashScreenは依然として動作しません – develoops

関連する問題