2012-03-21 7 views
0

を「失敗」:ウィンドウには、処理開始前にポップアップ表示されません - >しようとした睡眠()メソッドが、私はいくつかのプロセスがちょうどポップアップウィンドウに表示されるまでの時間を与えるために開始する前にスリープメソッドを使用しようとした

Processmethod() 
{ 

    QDialog *ProcessMessage = new QDialog;  
    Ui::DialogProcessMessage Dialog;    
    Dialog.setupUi(ProcessMessage);    
    ProcessMessage->setModal(true); 
    ProcessMessage->setAttribute(Qt::WA_DeleteOnClose); 
    ProcessMessage->show(); 

    sleep(500); 

    PROCESSES START      
} 

私の問題は、ポップアップウィンドウは、プロセスの開始前ではなく、プロセスの終了後に表示されることです。ウィンドウが表示された後に開始するプロセスを無効にすると、ポップアップウィンドウは正常に機能します。ポップアップウィンドウを担当するプロセスは失敗しますか?私の欠点はどこですか?挨拶

答えて

3

スリープ呼び出しの前に

qApp->processEvents(); 

を追加します。

+0

こんにちは、qApp-> processEvents();とはどういう意味ですか? - 私はQtの文書でそれを読むが、私はそれを得ていない。私はあなたの提案を試みましたが、プロセスが開始される前にウィンドウがポップアップしていますが、ダイアログテキストは表示されず、 'ProcessMessage-> setModal(true);'を設定してもGUIの上には残りません。 – Streight

+0

qApp(http://qt-project.org/doc/qt-4.8/qapplication.html#qApp)は、QApplicationインスタンスへのグローバルポインタです。Qtによって提供されています。 processEvents()(http://qt-project.org/doc/qt-4.8/qcoreapplication.html#processEvents)は、メインループにエンキューされたすべてのイベントをペイントやGUIの更新を含めて「フラッシュ」するメソッドです。 – Masci

+0

私は最初のコメントに書いたようにまだうまく動作しません。さらに、processEvents()メソッドは、私の目的ではないGUIのフリーズを防ぎます。凍っても問題ありません。ちょうどポップアップウィンドウが最初にポップアップするはずです。 – Streight

1

sleepはWindowsの機能ですか?それを使用しないでください。後で処理を開始するには、QTimerを使用してください。

ProcessMessage->show(); 
QTimer::singleShot(500, processObject, SLOT(start())); 
+0

問題は、ウィンドウポップアップの後に3つのメソッドによって呼び出される3つのプロセスがあることです。睡眠のようにもっと簡単なものはありませんか? – Streight

+0

@Streightので、プロセスを開始する独自のスロットを作る必要があります。違いは、どのように処理することが開始されるのだろうか?私は「スリープ」が実際にあなたを助ける方法を見ない。アプリケーションをフリーズするだけで、フリーズする必要はありません。 – Lol4t0

+0

hmmmわかりません。私は 'ProcessMessage-> show();'の間に時間があると思っていました。プロセスが起動すると、ウィンドウがポップアップできなくなってしまうので、sleep()を使用しようとしました。しかし、今私は次のプロセスがポップアップウィンドウを表示するのを妨げるかもしれないと思う。 – Streight

関連する問題