Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wt 单击后重定向前刷新/重置WPushButton的链接/源_Wt - Fatal编程技术网

Wt 单击后重定向前刷新/重置WPushButton的链接/源

Wt 单击后重定向前刷新/重置WPushButton的链接/源,wt,Wt,是否有一种方法可以在单击WPushButton后但在浏览器指向链接或资源之前重置其链接 背景是我有一个WResource,它复制一个item/tablemodel(从WAbstractTableModel派生),冻结它的状态/数据,并基于它进行csv文件转换。因此,当我的“下载当前状态为csv”按钮被单击时,我需要创建一个新的源,并在触发整个重定向机制之前设置按钮链接。我怎样才能做到这一点 编辑:看起来目前Wt无法实现这一点,请参见您可以创建一个资源,该资源在创建模型时获取模型,然后在handl

是否有一种方法可以在单击WPushButton后但在浏览器指向链接或资源之前重置其链接

背景是我有一个WResource,它复制一个item/tablemodel(从WAbstractTableModel派生),冻结它的状态/数据,并基于它进行csv文件转换。因此,当我的“下载当前状态为csv”按钮被单击时,我需要创建一个新的源,并在触发整个重定向机制之前设置按钮链接。我怎样才能做到这一点


编辑:看起来目前Wt无法实现这一点,请参见

您可以创建一个资源,该资源在创建模型时获取模型,然后在
handleRequest
方法中从中提取数据

例如:

class TableResource : public WResource
{
public:
    TableResource(WStandardItemModel *model, WObject *parent) :
        WResource(parent),
        model(model)
    {

    }

    ~TableResource()
    {
        beingDeleted();
    }

    void handleRequest(const Http::Request &request, Http::Response &response)
    {
        std::string data;

        for (int i = 0; i < model->rowCount(); ++i)
        {
            std::string row;

            for (int j = 0; j < model->columnCount(); ++j)
            {
                row.append(model->item(i, j)->text().toUTF8());
                row.append(";");
            }

            data.append(row);
            data.append("\n");
        }

        response.setMimeType("text/plain");
        response.out() << data;
    }

private:
    WStandardItemModel *model;
};
class TableResource:公共源
{
公众:
TableResource(WSTANDARItemModel*模型,WObject*父对象):
数据源(父级),
模型(模型)
{
}
~TableResource()
{
正在删除();
}
void handleRequest(常量Http::Request&Request,Http::Response&Response)
{
std::字符串数据;
对于(int i=0;irowCount();++i)
{
std::字符串行;
对于(int j=0;jcolumnCount();++j)
{
append(model->item(i,j)->text().toUTF8());
行。追加(“;”);
}
数据。追加(行);
数据。追加(“\n”);
}
response.setMimeType(“文本/普通”);
response.out()setText(WString(“项{1}{2}”).arg(i).arg(j));
项目。推回(项目);
}
模型->追加行(项目);
}
WTableView*表=新的WTableView(应用程序->根());
表->设置模型(模型);
WPushButton*btn=新的WPushButton(app->root());
btn->setText(“导出”);
btn->setResource(新表资源(模型,btn));
返回应用程序;
}

Thx供您尝试,但您忽略了我在问题中描述的基本问题:“我有一个复制项目/表格模型的Wrsource…用于冻结其状态/数据”。这是因为由于
Wt::WRessource
的并发性质,用户可以更改模型,即使在后续的
handleRequest
调用之间也是如此。我目前通过两次按钮调用解决了这个问题,请参见
WApplication* createApplication(const Wt::WEnvironment& env)
{
    WApplication *app = new WApplication(env);

    WStandardItemModel *model = new WStandardItemModel(app);
    for (int i = 0; i < 10; ++i)
    {
        std::vector<WStandardItem*> items;

        for (int j = 0; j < 4; ++j)
        {
            WStandardItem *item = new WStandardItem;
            item->setText(WString("item {1} {2}").arg(i).arg(j));
            items.push_back(item);
        }

        model->appendRow(items);
    }

    WTableView *table = new WTableView(app->root());
    table->setModel(model);

    WPushButton *btn = new WPushButton(app->root());
    btn->setText("export");
    btn->setResource(new TableResource(model, btn));

    return app;
}