C++ 在视图中用ID替换字符串的简单方法

C++ 在视图中用ID替换字符串的简单方法,c++,qt,model-view-controller,tableview,C++,Qt,Model View Controller,Tableview,我正在服务表之外存储服务名称。因此,services表包含了我在表视图中需要的所有内容,除了我想在视图中显示存储在service\u类型中的服务名称。 据我所知,即使是最简单的联接,也无法使QSqlTableModel工作 我知道我应该继承QAbstractTableModel,但我不知道如何在那里实现任何东西。Qt Creator中的一个向导为我制作了一个.h/.cpp对,但我在互联网上找不到任何示例来了解我应该实现什么 因此,我想问,是否有什么聪明的方法可以事先将所有服务类型字符串(只有20

我正在
服务
表之外存储服务名称。因此,
services
表包含了我在表视图中需要的所有内容,除了我想在视图中显示存储在
service\u类型中的服务名称。
据我所知,即使是最简单的联接,也无法使
QSqlTableModel
工作

我知道我应该继承
QAbstractTableModel
,但我不知道如何在那里实现任何东西。Qt Creator中的一个向导为我制作了一个
.h/.cpp
对,但我在互联网上找不到任何示例来了解我应该实现什么


因此,我想问,是否有什么聪明的方法可以事先将所有服务类型字符串(只有200个)放入QMap,并让tableView显示它们而不是ID。

正如我在评论中所说的,您可以在
数据()中对
QSqlTableModel
模型和
数据()进行子类化
函数用从另一个表查询的数据替换原始数据。例如:

QVariant MyTableModel::data(const QModelIndex &index, int role) const
{
  if (index.column() == 0 /*first column*/ && role == Qt::DisplayRole)
  {
    // Query data from another table (service_types) and as you get the right
    // type for the given row, return it.
    return type_I_got_from_service_type_table;
  }
  return QSqlTableModel::data(index, role);
}

也许,我可以继承QSqlTableModel本身,只需使
data()
方法的行为不同(对于1列)?Qt文档相当完整。有关其工作原理的解释和示例,请参见。您必须对模型进行子类化,并在
data()
函数中用从另一个表查询的数据替换原始数据。@vahancho好主意。我在重新实现中写了什么?比如说,我正在重新实现数据方法。我有一个
if()
用于确定列。但除了它,还有什么要写呢?什么是“代码”的等价物“保持原样”
?我的意思是,在定义它时,不能使用->index(r,c)->data()方法,对吗?