0

次のソースコードがあります。

    Processmethod()
{

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



    PROCESSES START                     
}

QDialog "ProcessMessage" を表示したい後、次の 3 つの異なるメソッドに含まれる 3 つの QProcess プロセスがあります。ポップアップ ウィンドウでこれらのメソッドを無効にする//と問題なく表示されますが、メソッドを有効にするとプロセスは正常に実行されますが、ポップアップ ウィンドウは表示されません。アイデア/解決策はありますか?挨拶

4

2 に答える 2

2

メイン関数にメイン アプリケーション ループが実装されているため、Process メソッドが返されないまでウィンドウは表示されません。

int main(int argc, char *argv[])
{
        QApplication a(argc, argv);
        QDialog w; // or other window
        w.show();
        return a.exec(); // main app loop (all drawing procedures called from here
}

したがって、PROCESSES START を呼び出しても、Process メソッドが QApplication::exec() に戻るまで何も起こりませんでした。

シグナル\スロットをキューモードで実装することにより、プロセスを別のスレッドで開始し、進行状況の通知をダイアログに送信できます

于 2012-03-21T15:55:10.540 に答える
1

コードの実行が終了するまで、ダイアログを表示することはできませんProcessMethod()QProcesses を同期的に (メソッドのいずれかを呼び出して)使用している場合waitForXXX、これが問題の原因になります。メインスレッドを保持している他のものも、この問題を引き起こします。

于 2012-03-21T15:45:13.877 に答える