Qt 和 std::bind

标签 qt qt5 qnetworkaccessmanager visual-studio-2010 stdbind

我尝试在 Qt 5.1 和 MSVC 2010 中使用 std::bind 将 QNetworkReply 事件 Hook 到成员函数,同时将回复作为参数传递。在 MSVC 2010 上,直接将 std::bind 放入连接行会失败,并出现大量模板错误,但使用 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 )
{
    ..
}

最佳答案

您需要将绑定(bind)转换为函数指针:

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

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

关于Qt 和 std::bind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18173376/

相关文章:

qt - 在 QString 中打印尾随零

c++ - 如何在特定位置设置QListWidget

python - PyQt : how to use QWebPage with an anonimous proxy

qt - 如何获取QNetworkAccessManager的连接状态?

multithreading - QThread中的QTcpSocket

c++ - 如果 Q_OBJECT 宏被其他宏删除,则无法编译 MOC 文件 : The header file doesn't include <QObject>

c++ - 查询的SQL格式

c++ - Qt5 lambda 连接内存泄漏的新信号

c++ - 如何使用 QFtp::list 和 QFtp::listInfo 检查目录是否存在

c++ - Qt 下载文件 - QNetworkAccessManager,没有获取数据