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

时间:2013-06-18 13:28:01

标签: qt

我想通过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 个答案:

答案 0 :(得分: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?