QT 中 connect函数的槽函数未执行完毕就执行了后续语句

代码如下:

void main()
{
    tunnelName = ui->lineEdit_tunnelname->text ();
    ui->lineEdit_tunnelImg->setText( pinyin_conv(tunnelName));//需要点击两次才能实现?
    qDebug()<<2;
}

QString Add_tunnel::pinyin_conv(QString HANZI)
{
    QNetworkAccessManager* m_manager = new QNetworkAccessManager;
    QNetworkRequest request;
    request.setUrl(QUrl(api_url.arg(HANZI)));
    m_manager->get(request);//向网页发起get请求

    connect(m_manager, SIGNAL(finished(QNetworkReply*)), this,SLOT(dealMsg(QNetworkReply*)),Qt::DirectConnection);//请求完成,获取数据并在槽函数中进行处理

    qDebug()<<1;

    return tunnelName_eng;
}

void Add_tunnel::dealMsg(QNetworkReply *reply)
{
    QByteArray array = reply->readAll();
    tunnelName_eng = QString::fromUtf8(array);

    qDebug()<<0;
}

期望qDebug结果是0,1,2 ; 代表pinyin_conv函数返回了处理后的字符串tunnelName_eng。

最后输出结果是1,2,0。 先返回了未改变值的字符串tunnelName_eng。

connect(m_manager, SIGNAL(finished(QNetworkReply*)), this,SLOT(dealMsg(QNetworkReply*)),Qt::DirectConnection);//请求完成,获取数据并在槽函数中进行处理

这个应该是异步执行的。不然不会先输出1,2.

如有帮助,请采纳。点击我回答右上角【采纳】按钮。

发送get请求是一个异步过程,程序发送请求后会继续执行后面的步骤,不会阻塞在发送请求的位置,这样能够避免程序界面的卡顿(如果是阻塞模式,发送请求后,界面会卡死,直到请求返回)。