我是一个初学者,正在学习Qt,并尝试理解Qt提供的下载操作示例。在downloadmanager.cpp中,一个成员函数如下:
void DownloadManager::append(const QUrl &url)
{
if (downloadQueue.isEmpty())
QTimer::singleShot(0, this, SLOT(startNextDownload()));
downloadQueue.enqueue(url);
++totalCount;
}
- 如果
downloadQueue
为空,为什么需要在添加url之前激活startNextDownload()
呢?(请注意:startNextDownload()
会在downloadQueue
为空时结束程序) - 我不确定为什么要使用
QTimer::singleShot(x, y, z)
,因为据我所知,它是一个延迟0毫秒激活槽的定时器。 - 我无法从Qt Assistant中确定singleShot是针对给定毫秒间隔重复激活插槽的一次性设置还是一次性的。
澄清:
我是个初学者,在像这样的示例中:
statement1;
statement2;
我习惯于在继续处理statement2
之前先运行并完成statement1
。但是尝试学习Qt并阅读给定的示例后,我发现SLOT(startNextDownload())
在downloadQueue.enqueue(url);
已经执行后被激活。我正在努力理解为什么这样可以工作。