代码如下:
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请求是一个异步过程,程序发送请求后会继续执行后面的步骤,不会阻塞在发送请求的位置,这样能够避免程序界面的卡顿(如果是阻塞模式,发送请求后,界面会卡死,直到请求返回)。