Wt 从 http 响应回调中添加新的小部件

Posted

技术标签:

【中文标题】Wt 从 http 响应回调中添加新的小部件【英文标题】:Wt adding new widget from http response callback 【发布时间】:2014-05-06 16:16:25 【问题描述】:

我正在尝试从 http 客户端获取回调将小部件添加到 root()。当我点击一个菜单项时,我会发送 get 请求,然后我会根据响应添加一个小部件。

我的点击处理程序:

Wt::Http::Client *client = new Wt::Http::Client(Wt::WApplication::instance());
client->done().connect(boost::bind(&RequestBase::handleHttpResponse, this, _1, _2));
client->get("url...");

以及回调方法:

void RequestBase::handleHttpResponse(boost::system::error_code err, const Wt::Http::Message& response) 
    stringstream ss;
    ss << "test" << i++;
    new Wt::WText(ss.str(), root());
    Log(ss.str());

当我第一次单击菜单项时,我在控制台中看到了日志消息,但在浏览器中没有任何反应。当我再次单击它时,“test0”文本出现在浏览器中,“test1”出现在控制台中。第三次,“test1”出现在浏览器中,“test2”出现在控制台等中。如果我将new Wt::WText("test", root()); 添加到单击处理程序中,则文本会在单击后立即显示在浏览器中。我怎样才能让它工作?

【问题讨论】:

【参考方案1】:

启用 Wt 的服务器推送机制。在构造 WApplication 时调用 WApplication::enableUpdates(),然后在每次修改不是由客户端事件触发的小部件树之后调用 WApplication::triggerUpdate()。比如鼠标点击是客户端事件,handleHttpResponse回调因为客户端的某些动作而没有被调用。

【讨论】:

以上是关于Wt 从 http 响应回调中添加新的小部件的主要内容,如果未能解决你的问题,请参考以下文章

如何创建自定义颤振 sdk 小部件,重建颤振和使用新的小部件

如何将旧的小部件迁移到新的小部件

从其他网页调用 c++ web toolkit 小部件?

如何将 WT 小部件放入 PDF?

如何在不创建新的小部件树分支的情况下重用相同的布局屏幕

多个文件中的 PyQt 小部件