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