在我的程序中有一个循环,其中有类似的东西:
QNetworkReply *reply = manager->get(QNetworkRequest(QUrl(path)));
多次调用此函数。在“回复完成”时,程序显示模态对话框(例如,常规QDialog)。问题在于我希望对话一个接一个地出现,而不是一次出现,就像现在一样。
我尝试使用
QList<QEventLoop *> stack;
每个“等待”对话框都有一个QEventLoop。但在我看来,这是一个糟糕的解决方案。
答案 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
来延迟下一个对话框。
基本上每次显示一个对话框时,您都会计算出最早显示另一个对话框的时间,并在此时设置一个计时器。当它被触发时,你检查一条消息并打开一个对话框,依此类推......
但是我想知道对话框是否是显示连续信息输入的最佳方式。