Qt C++从线程发出,在插槽GUI中
Qt C ++ emit from the thread, in the slot GUI
主窗口类(GUI(中有一个插槽,它在QTextBrowser:中显示数据
void MainWindow::setLogs(QString param, QString text) {
qDebug()<<text;
ui->Logs->append(text);
}
有一个类在一个单独的线程中运行,进行POST搜索并将数据插入QTextBrowser:
QNetworkRequest request(apiUrl);
request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0");
request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
request.setRawHeader("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3");
request.setRawHeader("Accept-Encoding", "identity");
request.setRawHeader("Connection", "keep-alive");
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
reply = manager.post(request, "data="+data);
connect(reply, &QNetworkReply::finished,this, &MakePost::getReplyFinished);
connect(reply, &QNetworkReply::readyRead, this, &MakePost::readyReadReply);
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(GetError()));
void MakePost::readyReadReply()
{
QString GetRes = QString::fromUtf8(reply->readAll());
qDebug() << "GetRes: " + GetRes;
emit SendLog(GetRes);
}
调用线程:
QThread *postThread = new QThread;
MakePost *sendPost = new MakePost();
sendPost->SetParam(Data, SubUrl, requestString);
sendPost->moveToThread(postThread);
sendPost->manager.moveToThread(postThread);
connect(postThread, SIGNAL(started()), sendPost, SLOT(MakePostSignal()));
postThread->start();
以及主窗口中的连接槽流:
connect(SendPost, SIGNAL(SendLog(QString)), this, SLOT(setLogs(QString)));
如果我在线程中运行时只收到结果qDebug((<lt;"GetRes:"+GetRes;以及所有。。。
请帮忙,如何在线程和GUI之间创建信号槽的连接?谢谢
网络请求已经在工作线程中异步处理:QNetworkAccessManager
就是这样做的。你不需要在混合物中再添加一个线程。
对于其他CPU绑定的一次性任务,您应该通过QtConcurrent::run
利用默认线程池。线程创建和销毁成本高昂,而且线程池的位置独特,可以全面了解应用程序对工作线程的需求,并最有效地管理它们的使用寿命。对于I/O绑定任务,应该使用第二个线程队列,该队列作为第一个参数传递给QtConcurrent::run
。
相关文章:
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 从Q_INVOKABLE功能或插槽中更改QQuick图像源
- 升压信号2将插槽传递到成员功能以断开连接
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- C++ 信号和插槽不工作:插槽不响应事件
- NS3 插槽混淆(需要帮助理解)
- QObject::连接无法将信号连接到*this*对象的插槽
- QT 插槽未在主线程上调用
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 控制带有信号/插槽的Qt QML滑动视图
- Qt 信号/插槽问题
- QT5 信号不会激活插槽内的功能
- Qt5:连接:如果插槽的参数少于信号,如何使用"连接"
- 需要实例化不同类/对象并在启动时确定的硬件插槽的设计模式
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- Qt插槽调用了两次
- C++Qt信号和插槽
- Qt将GUI类中的方法连接到另一个类中的插槽
- Qt C++从线程发出,在插槽GUI中