Qt和std :: bind

时间:2013-08-11 15:14:04

标签: qt qt5 qnetworkaccessmanager visual-studio-2010 stdbind

我正在尝试在Qt 5.1和MSVC 2010中使用std :: bind将QNetworkReply事件挂钩到成员函数,同时将回复作为参数传递。直接将std :: bind放在连接行中会因MSVC 2010上的大量模板错误而失败,但是使用std :: function将其拆分为两行。我喜欢坚持一条线。实现这一目标的神奇咒语是什么?

void MyClass::doRequest ( )
{

    ..

    QNetworkReply * reply = nam.get(...)

    // next line fails on MSVC 2010
    connect(reply, &QNetworkReply::finished, std::bind(&MyClass::onNetworkDone, this, reply));

    // next two lines do work on MSVC 2010  
    std::function<void ()> a = std::bind<void()>(&MyClass::onNetworkDone, this, reply);
    connect(reply, &QNetworkReply::finished, a);
}

void MyClass::onNetworkDone( QNetworkReply * reply )
{
    ..
}

1 个答案:

答案 0 :(得分:2)

您需要使用以下命令将绑定转换为函数指针

connect(reply, &QNetworkReply::finished, (void(*)()) std::bind(&MyClass::onNetworkDone, this, reply));

这回答了你的问题。但是,由于上述评论中讨论的原因,我不确定它是否会在运行时崩溃。