如何在Qt中通过QSignalMapper传递参数

3

我想通过Qt制作一个下载器。在使用QSignalMapper时遇到了问题。

在QNetworkReply中有一个信号downloadProgress(qint64,qint64)。由于我有很多下载任务,所以我使用QSignalMapper来处理这个信号。但是我该如何将(qint64,qint64)传递给我的自定义函数呢?

我将id传递给了我的槽函数,但是我丢失了(qint64,qint64)。

connect(t->reply, SIGNAL(downloadProgress(qint64,qint64)), signalMapper, SLOT(map()));
signalMapper->setMapping(t->reply, id);

如何解决这个问题?
1个回答

2
您不能这样做。来自: http://qt-project.org/doc/qt-5.0/qtcore/qsignalmapper.html 该类收集一组无参数信号,并将它们重新发送带有整数、字符串或小部件参数的信号,这些参数对应于发送信号的对象。
因此,QSignalMapper不是为了传输参数到其他槽而设计的。如果您想要这样做,您需要手动连接所有内容,或者以其他方式执行此人所描述的操作:Can QSignalMapper be used to re-emit signals with multiple parameters?并重新实现QSignalMapper以适应您的特定情况。
如果您使用Qt 5,也可以进行以下操作:How to keep the source signal's parameters while using QSignalMapper?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接