我从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: “重量:: DBO ::查询::查询(WT :: DBO ::会议 &amp;,const std :: string&amp;,const std :: string&amp;)':参数1不能从'Wt :: Dbo :: Query'转换为'const Wt :: Dbo :: Query&amp;'
我已经尝试了几个构造函数,变量类型等...我知道这一点与此接近:
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);
但我无法解决这个问题,我认为正确的方法是第二个,根据我用Google搜索的文件和片段。
有人可以发布一个简单的例子,以便澄清Wt如何使用它吗?
Wy the wall,我在Win 8.1 + VS 2013下使用Wt 3.3.3。
答案 0 :(得分: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);
注意:不要忘记使用Query Model-&gt; getQuery()!!