gpt4 book ai didi

c++ - 如何在信号槽中放置等待条件?

转载 作者:搜寻专家 更新时间:2023-10-31 01:18:00 24 4
gpt4 key购买 nike

我正在做一个网络相关的项目。最近我遇到了这种情况。这只是一个 stub

Class My_Class
{
public:
My_Class();
void start();
public slots():
void after_Load_Function();
}

My_Class::My_Class()
{
//Some initializations
connect(WebPage,SIGNAL(finished()),this,SLOTS(after_Load_Function()));
}

void My_Class::start()
{
WebPage->load();
}

void My_Class::after_Load_Function()
{
//Do something with the finished WebPage
}

int main(int argc,char * argv[])
{
//Some Qt things

My_Class a;
a.start();
}

“WebPage”在完全加载时发出“finished”信号。现在的问题是在加载“webPage”之前,“start”正在返回。从而控制到达“主要”。因此,现在控件应该仅在“after_Load_Function”完成其工作后才从“开始”返回。因此我想要下面的序列,

  1. main 创建 My_Class 对象 A。
  2. 主要从 A 调用“开始”。
  3. start 从“WebPage”调用加载,它一直等到“WebPage”发出“finished”, 依次发出调用“after_Load_Function”和“after_Load_Function”
    完成它的工作。
  4. 现在,“开始”回来了
  5. 主要返回

但是,我不知道如何制作这种等待条件。我该怎么做?

最佳答案

您可以通过运行本地事件循环,让组件处理网络收入并加载页面来完成此操作。当他们发出信号时,您在事件循环上执行一个槽以退出它。

void My_Class::start()
{
QEventLoop qel;
QObject::connect(WebPage, SIGNAL(finished()), &qel, SLOT(quit()));

WebPage->load();
qel.exec();
}

我以前用过这个,效果很好。不过,我不建议经常使用它,因为它会处理事件,包括 start 的调用者可能不希望在 start 调用期间处理的事件>,因此您需要将其记录给调用者。您可以通过将某些标志传递给 QEventLoop::exec 来阻止处理某些事件,例如阻止处理用户界面事件。

关于c++ - 如何在信号槽中放置等待条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7626597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com