ワーカースレッドがそれを実行し、GUIスレッドをコールバックしてダイアログボックスを閉じるためのシグナルを発行するという、少し奇妙な状況があります。誰かがこれが機能する理由を説明できますか?
WorkerThread:
[Header]
signals:
void writeComplete(void);
[Source]
void startWorkerThread()
{
// do some stuff in boost::thread
emit writeComplete();
}
MainWindowサブクラス:
burnDialog = new QProgressDialog("Writing to disc", "", 0, 0);
burnDialog ->setCancelButton(0);
QWidget::connect( discHandler.get(), SIGNAL(writeComplete()), burnDialog, SLOT(close()) );
QWidget::connect( discHandler.get(), SIGNAL(writeComplete()), this, SLOT(close()) );
burnDialog->open();
discHandler->startWorkerThread();
しかし、これはしません:
MainWindowサブクラス:[ヘッダー]パブリックスロット:void closeWithDialog(void);
[Source]
burnDialog = new QProgressDialog("Writing to disc", "", 0, 0);
QWidget::connect( discHandler.get(), SIGNAL(writeComplete()), this, SLOT(closeWithDialog()) );
burnDialog ->setCancelButton(0);
burnDialog->open();
discHandler->startWorkerThread();
void closeWithDialog()
{
burnDialog->close();
close();
}