qt - 等待信号

标签 qt signals signals-slots qt-signals

我正在开发一个将文件内容上传到服务器的应用程序。

要将文件上传到服务器,我使用了“QNetworkAccessManager”类。由于它以异步方式工作,因此我通过使用 QEventLoop 将其更改为以同步方式工作。

Class FileTransfer
{
Public : 
     QNetworkAccessManager mNetworkManager;
     Void Upload(QNetworkRequest request, QIODevice *data)
     {
           responce = mNetworkManager.put(request, data);
           EventLoop.exec();
           ReadResponce(responce);
      }

      Void Stop()
      {
            responce ->close();
      }
}

在我的示例应用程序中,我有 2 个窗口。第一个选择文件,第二个显示进度。

当用户单击第一个窗口中的上传按钮时,将显示第二个窗口,然后我创建 FileTransfer 对象并开始上传。

在上传文件时,如果用户关闭表单,然后在窗口的析构函数中调用“FileTransfer”的停止,然后删除“FileTransfer”对象。

但是这里 Upload() 函数还没有完成,所以它会崩溃。

请帮助我:
如何在“stop()”函数中等待,直到 Upload() 函数完成

最佳答案

从我从您的代码中可以看出,您正在执行 QEventLoop 但实际上并没有将其“退出”槽连接到任何信号。以下面为例,login是一个QHttp——代码取自不同的东西——但原理适用。

/* Create the QEventLoop */
QEventLoop pause;
/* connect the QHttp.requestFinished() Signal to the QEventLoop.quit() Slot */
connect(&login, SIGNAL(requestFinished( int, bool )), &pause, SLOT(quit()));
/* The code that will run during the QEventLoop */
login.request(header,&logmein,&result);
/* Execute the QEventLoop - it will quit when the above finished due to the connect() */
pause.exec();

如果我没记错的话,这可以应用于您的代码,就像这样......
/* connect the signal to the relevant slot */
connect(&mNetworkManager, SIGNAL(finished( QNetworkReply )), &EventLoop, SLOT(quit()));
/* Execute the code that will run during QEventLoop */
responce = mNetworkManager.put(request, data);
/* Execute the QEventLoop */
EventLoop.exec();

如果我误解了您的查询,请见谅!我只是在休息后再次掌握 qt,但我相信这就是你的意思!祝你好运!

关于qt - 等待信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3052192/

相关文章:

python - 如何使用新语法将自定义信号连接到 pyside 中的插槽?

c++ - 具有 Qt 信号/槽的生产者/消费者

c++ - C1083 : Cannot open include file: 'GL/gl.h' : No such file or directory

python - Django、Signals 和另一个进程

python - Django 发出多对多变化的信号

python - 如何正确地动态关闭 Python RQ 工作进程?

c++ - 将预编译库复制到构建目录或将它们添加到 QBS 项目中的 PATH

c++ - Qt 连接 lambda

ios - QtPositioning 5.3,QML PositionSource 在 ios 8.1 上不返回任何数据?

c++ - Qt Designer,上下文菜单中缺少 "go to slot"?