【发布时间】:2017-01-07 17:20:17
【问题描述】:
我是初学者学习Qt,并试图了解Qt提供的example进行下载操作。在downloadmanager.cpp 中,成员函数如下:
void DownloadManager::append(const QUrl &url)
{
if (downloadQueue.isEmpty())
QTimer::singleShot(0, this, SLOT(startNextDownload()));
downloadQueue.enqueue(url);
++totalCount;
}
- 我很困惑,为什么如果
downloadQueue为空,则需要在添加网址之前激活startNextDownload()。 (注意:如果downloadQueue为空,则startNextDownload()结束程序) - 我不确定为什么:
QTimer::signleShot(x, y, z)已经被使用了。据我了解,它是一个以 0 毫秒的延迟激活插槽的计时器。 - 通过查看 Qt 助手,我无法确定 singleShot 是一次性设置,以在给定的毫秒间隔内重复激活插槽,还是一次性设置
澄清:
我是初学者,例如:
statement1;
statement2;
我习惯于看到statement1 运行和完成,然后再继续处理statement2。但是尝试学习 Qt 并阅读给定的示例,我看到 SLOT(startNextDownload()) 在 downloadQueue.enqueue(url); 发生之后被激活。我正在尝试了解为什么这样做。
【问题讨论】:
-
是 QT4 吗?你不是在用 QT5 吗?
-
我使用的是 Qt 4.8.7。
-
好吧,只是想知道你是 qt 的初学者。通常初学者会使用我认为的最新版本:)
-
感谢这个问题,讽刺的是它帮助我更好地理解了这些东西