QT几个异步模态对话框

时间:2012-01-17 08:44:13

标签: qt asynchronous modal-dialog

在我的程序中有一个循环,其中有类似的东西:

QNetworkReply *reply = manager->get(QNetworkRequest(QUrl(path)));

多次调用此函数。在“回复完成”时,程序显示模态对话框(例如,常规QDialog)。问题在于我希望对话一个接一个地出现,而不是一次出现,就像现在一样。

我尝试使用

QList<QEventLoop *> stack;

每个“等待”对话框都有一个QEventLoop。但在我看来,这是一个糟糕的解决方案。

1 个答案:

答案 0 :(得分:0)

您无需使用QEventLoop

如果对话框是模态的,则会阻止所有其他人获得输入。在这种情况下,您应该在对话框关闭时发送信号。例如,您可以使用QDialog::Finished(int)。信号接收器不是打开对话框的对象。

//slot
void showDialog(){
 if(msg.size() <= 0)
  return;
 //create dialog here
 connect(createdDialog, SIGNAL(finished(int)), this, SLOT(showDialog()));
}

您可以自己为第一条消息调用此方法。

如果对话框是非模态的,那么您需要使用singleshot QTimer来延迟下一个对话框。 基本上每次显示一个对话框时,您都会计算出最早显示另一个对话框的时间,并在此时设置一个计时器。当它被触发时,你检查一条消息并打开一个对话框,依此类推......

但是我想知道对话框是否是显示连续信息输入的最佳方式。