【问题标题】:Wt - Example of QueryModel and WTableView?Wt - QueryModel 和 WTableView 的示例?
【发布时间】:2015-01-28 13:18:19
【问题描述】:

我从 Wt 开始,在学习了 ORM 模块的基础知识之后,我试图显示一个表格(TableTags)的结果,但没有成功。

我已将表格 TableTag 定义为:

class TableTag
{
public:
    static const unsigned int tableVersion = 1;
    std::string name;
    //Wt::Dbo::collection< Wt::Dbo::ptr<TablePost> > tablePosts;

    TableTag();
    ~TableTag();
    static void initTableRecords(Wt::Dbo::Session &_session);

    template<class Action>
    void persist(Action &_action)
    {
        Wt::Dbo::field(_action, name, "Name");

        //Wt::Dbo::hasMany(_action, tablePosts, Wt::Dbo::ManyToMany, "Post");
    }
};
typedef Wt::Dbo::collection< Wt::Dbo::ptr<TableTag> > TableTags;

我开始使用类似于以下的代码:

DDBBApp::setDDBBBackendAndSession(ddbbBackend_,ddbbSession_);
ddbbSession_.mapClass<TableTag>("TableTag");
{
    Wt::Dbo::Transaction transaction(ddbbSession_);

    Wt::Dbo::QueryModel<TableTag> * qmTags = new Wt::Dbo::QueryModel<TableTag>();
    TableTags tags = ddbbSession_.find<TableTag>();
    Wt::Dbo::Query<TableTag> qTag(ddbbSession_.find<TableTag>());
    qmTags->setQuery(qTag);


    WTableView * wtv = new WTableView();
    wtv->setModel(qmTags);
}

但是编译器报这个错误(VS2013,翻译成英文):

DDBBApp.cpp(54):错误 C2664: 'Wt::Dbo::Query::Query(Wt::Dbo::Session &,const std::string &,const std::string &)' : 参数 1 不能从 'Wt::Dbo::Query' 转换为 'const Wt::Dbo::Query &'

我已经尝试了几种构造函数、变量类型等...我知道重点是这样的:

Wt::Dbo::QueryModel<TableTag> * qmTags = new Wt::Dbo::QueryModel<TableTag>();

Wt::Dbo::Query< Wt::Dbo::ptr<TableTag> > q1 = ddbbSession_.find<TableTag>();
qmTags->setQuery(qTag); //Error here

Wt::Dbo::Query<TableTag> q2 = ddbbSession_.find<TableTag>(); //Error here
qmTags->setQuery(q2);

但我无法处理这个问题,我认为正确的方法是第二个,根据我用谷歌搜索的文档和 sn-ps。

有人可以发布一个简单的示例,以便我澄清 Wt 是如何使用它的吗?

Wy 墙,我在 Win 8.1 + VS 2013 下使用 Wt 3.3.3。

【问题讨论】:

    标签: c++ wt


    【解决方案1】:

    终于想通了^_^ 感谢:Not getting headers on WTableView with QueryModel

    正确的代码如下:

    Wt::Dbo::QueryModel< Wt::Dbo::ptr<TableTag> > * qmTags1 = new Wt::Dbo::QueryModel< Wt::Dbo::ptr<TableTag> >();
    qmTags1->setQuery(ddbbSession_.find<TableTag>());
    qmTags1->addAllFieldsAsColumns();
    
    WTableView * wtv1 = new WTableView();
    wtv1->setModel(qmTags1);
    this->root()->addWidget(wtv1);
    

    注意:不要忘记使用 QueryModel->setQuery()!!

    【讨论】:

      猜你喜欢
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      • 1970-01-01
      相关资源
      最近更新 更多