如何处理QT中动态添加QObject的SIGNAL(带参数)?

时间:2012-02-26 10:11:16

标签: c++ qt signals signals-slots

我发现QSignalMapper可以使用 NO Arguments 来处理SIGNAL s,但我怎样才能处理SIGNAL一些QProgressBar参数。

实际问题是,我已动态创建了一些QNetworkReply,并且我想使用downloadProgress(qint64, qint64)的{​​{1}}来更新条形码,然后问题就出现了。

1 个答案:

答案 0 :(得分:1)

问题在于QNetworkReply's downloadProgress(qint64, qint64)QProgressBar的插槽无论如何都是无法匹配的。在这种情况下,信号映射器不会帮助你,这太具体了。

您必须自己创建适配器类:

class Adapter: public QObject
{
    Q_OBJECT
public:
    explicit Adapter(QProgressBar* bar, const QNetworkReply* reply):QObject(bar)
    {
        connect(reply, SIGNAL(downloadProgress(qint64,qint64)), SLOT(changeProgress(qint64,qint64)));
    }

private slots:
    void changeProgress(qint64 progress, qint64 total)
    {
        QProgressBar* bar = static_cast<QProgressBar*>(parent());
        bar->setMaximum(total);
        bar->setValue(progress);
    }

};