记录一次qt文字转语音开发过程中遇到的问题

本文记录了使用Qt进行文字转语音开发时遇到的挑战,包括应用Qt Speech示例程序,实现托盘程序,主线程与工作线程的交互,HTTP GET请求的处理以及监测ffplay32进程的生命周期。
摘要由CSDN通过智能技术生成

1. 应用qt speech 示例程序,随qtcreator 就可以找到

2. 托盘程序也是在实例中找到.

3.mainwindow 中 work 线程作为成员变量。

    work.moveToThread(&t);
    QObject::connect(&t,SIGNAL(started()),&work,SLOT(dowork()));
    work.bWorkStop = false;
    t.start();

4. work 线程主要做 http get 请求   replyFinish 响应后 把请求结果发送额给mainwindow 主线程。

 m_manager = new QNetworkAccessManager(this);    
connect(m_manager, SIGNAL(finished(QNetworkReply*)), this,   SLOT(replyFinish(QNetworkReply*)),Qt::QueuedConnection);
void Worker::dowork()
{
    xErrPrint<<QString("Head");

    req.setRawHeader("Content-Type","application/json;charset-UTF-8");

#ifdef MAINTEST
    baseUrl = "http://127.0.0.1:8099/speakAlarmInfo";
#else
#endif
   req.setUrl(baseUrl);
   bWorkStop = false;
   while(!bWorkStop)
   {
       time_t start=clock();
       qDebug()<<"Worker::while onTimeout get called from?: "<<QThread::currentThreadId();
       QNetworkReply* reply = m_manager->get(req);

      //必须加入局部事件循环 ,否则不会进入replyFinish(QNetworkReply*)事件.
       QEventLoop loop;
       QObject::connect(reply, SIGNAL (finished()), &loop, SLOT (quit()));
       loop.exec();

       // 下面的可以解决请求超时问题 。 留作参考
       /*  QEventLoop loop;
      QObject::connect(reply, SIGNAL (finished()), &loop, SLOT (quit()));

      QTimer timer;
      timer.setSingleShot(true);
      connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit);
      timer.start(1000);

      connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
      connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), &loop, SLOT(quit()));
      loop.exec();
      */
       time_t end=clock();
       qDebug()<<(double)(end-start)/CLOCKS_PER_SEC;

       QThread::sleep(this->getSpanTime);//this->getSpanTime
   }
}
void Worker::reply
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值