首页 文章

在等待QTcpSocket数据时阻止GUI

提问于
浏览
0

我正在编写一个程序,使用Qt与基于网络的API进行交互 . 与API的交互是使用XML消息(查询和结果)进行的

我在共享库项目中的类中实现了通信和数据处理,我有一个QMainWindow,用户可以在其中输入连接详细信息 . 单击连接按钮时,应发生以下情况:1 . 创建连接类的实例 . 2.将连接消息发送到API以获取会话ID . 解析答案并将会话ID存储在类实例中 . 3.向API发送消息以获取一些字段信息 . 然后解析XML以提取所需的字段信息以从API获取数据 . 4.发送另一条消息以获取与字段匹配的数据 . 然后解析XML答案并将其存储在数据结构中以进行处理 . 5.然后处理数据并最终显示给用户 .

我做了一个简单的控制台程序来测试库,它工作正常 - 在处理完上一条消息的所有数据之前没有发送消息 . 但是,当我在QMainWindow实例中实现相同的进程时,不会发生等待,并且无需等待即可一个接一个地发送消息 .

如何在发送下一条消息之前阻止GUI线程等待完整处理?

谢谢

1 回答

  • 2

    通过禁用不希望允许与之交互的小部件来阻止UI,或者通过对它们进行字面调用 disable() 方法,或者通过基于某个状态变量保护交互来阻止UI,例如:

    connect(button, &QPushButton::clicked, button, [this]{
      if (! hasAllData) return;
      // react to a button press
    });
    

    您所需要的只是定义应用程序可以处于的一组状态,并在适当的状态下禁用相关的小部件 . 我认为一旦会话 Build 起来,无论如何都会以最快的速度并行发出所有查询,并且当回复实时返回时异步更新UI .

相关问题