qt 数据库表映射为类
时间: 2023-07-25 14:42:37 浏览: 72
在Qt中,可以通过继承QSqlTableModel来实现数据库表到类的映射。下面是具体的实现步骤:
1. 定义自己的模型类
```c++
class MyTableModel : public QSqlTableModel
{
Q_OBJECT
public:
MyTableModel(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase());
//定义自己的数据列枚举
enum {
Id = Qt::UserRole,
Name,
Age,
Sex
};
//根据索引获取对应的值
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
};
```
其中,我们定义了自己的数据列枚举和data()函数,后面会用到。
2. 重载data()函数
```c++
QVariant MyTableModel::data(const QModelIndex &index, int role) const
{
if(role == Id){
return QSqlTableModel::data(this->index(index.row(), 0));
}
else if(role == Name){
return QSqlTableModel::data(this->index(index.row(), 1));
}
else if(role == Age){
return QSqlTableModel::data(this->index(index.row(), 2));
}
else if(role == Sex){
return QSqlTableModel::data(this->index(index.row(), 3));
}
return QSqlTableModel::data(index, role);
}
```
在这里,我们根据我们定义的数据列枚举来获取对应的值。
3. 在主程序中使用自定义模型类
```c++
MyTableModel *model = new MyTableModel(nullptr, db);
model->setTable("Person"); //设置表名
model->select(); //查询
ui->tableView->setModel(model); //设置模型
```
在这里,我们使用自定义模型类来获取数据,然后将模型设置给tableView。
这样,我们就可以将数据库表映射为类了。需要注意的是,这里只是一个简单的示例,如果需要更加复杂的映射,则需要自己定义更多的函数来实现。