我应该如何/在哪里定义C ++ / Qt中的自定义模型逻辑?

时间:2012-12-18 10:29:50

标签: qt model

我主要是一名Python / Django开发人员,所以我的术语可能有些偏差,所以我找不到这个问题的答案:

我应该如何/在哪里定义C ++ / Qt中的自定义模型逻辑?

假设我有Users列表date_birth,我想添加方法getAge(),它只是计算用户的年龄。

我会把它放在哪里?在我看来,创建一个QSqlRecord的子类是合适的,但我没有找到任何对这种方法的引用。

第二:是否存在子类化QSql(关系)的约定?TableModel?

我在很多例子中找到了相似的片段:

QSqlTableModel *model = new QSqlTableModel(parentObject, database);
model->setTable("employee");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
model->setHeaderData(0, Qt::Horizontal, tr("Name"));
model->setHeaderData(1, Qt::Horizontal, tr("Salary"));

但在我需要的地方定义它似乎是多余的。创建子类(如UserTableModel)并在其构造函数中调用所有这些方法是否常见?我再次找不到任何引用。

3 个答案:

答案 0 :(得分:1)

你想要实现的是一个objets /关系映射。

所以这样做,最好不要让对象从任何SQL类继承(以任何对象语言)

您可以创建两个类:一个用于您的“employee”,另一个工厂对象将通过处理SQL对象来创建此对象:

ObjectsFactory *factory = new ObjectsFactory();
Employee e = factory->getEmployee(2423);
int age = e->getAge();

使用这种解决方案,您的Employee类将不依赖于SQL类。您甚至可以根据任何存储模型选择创建处理程序。

ObjectFactory *factory = new ObjectsFactory(new SQLHandler);

或(更方便测试)

ObjectFactory *factory = new ObjectsFactory(new FileHandler);

ObjectFactory *factory = new ObjectsFactory(new MemoryHandler);

我建议您查看Data Access Object pattern

答案 1 :(得分:0)

要在Qt中创建自己的模型,你应该  1.创建一个继承QSqlTableModel的类  2.如果需要实施:

QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const;
int rowCount( const QModelIndex& parent = QModelIndex() ) const;

3。添加您想要的任何方法 您可以找到更多信息here

答案 2 :(得分:0)

我可以为您提供另一种方法,您将使用代理模型将逻辑与数据源分开,而不是继承。

该方法看起来更灵活,更灵活,可以更改布局如何定义数据。 有一些文章可以提供更好的提示,如何以非常灵活的方式使用模型:

http://lynxline.com/category/models/