我正在做一个与网络相关的项目。最近我碰到这种情况。这只是一个存根
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”将发出“完成”信号。
现在问题出在加载“webPage”之前,“start”正在返回。从而控制到达“主”。因此,现在控件仅应在“after_Load_Function”完成其工作之后才从“开始”返回。因此,我想要以下顺序,
并依次发出“after_Load_Function”和“after_Load_Function”
完成工作。
但是,我不知道如何使这种等待条件。我该怎么办?
最佳答案
您可以通过运行本地事件循环来执行此操作,让组件处理网络收入并加载页面。当它们发出信号时,您可以在事件循环上执行一个插槽以将其退出。
void My_Class::start()
{
QEventLoop qel;
QObject::connect(WebPage, SIGNAL(finished()), &qel, SLOT(quit()));
WebPage->load();
qel.exec();
}
我以前一直在使用它,并且效果很好。我不建议经常使用它,因为它会处理事件,包括在调用
start
期间可能不希望start
的调用者处理的事件,因此您需要将此事件记录给它的调用者。您可以通过将某些标志传递给QEventLoop::exec
来阻止某些事件的处理,例如防止处理用户界面事件。