C++ QTableView和惟一id
我是Qt新手,来自C#Net。我试图复制一个相当简单的程序,作为一个学习工具,我在Qt中用C#编写。我有一个数据模型,它继承QabStretctTableModel并实现: 行数, 列数, 数据, setData, 人头数据 旗帜 我的数据结构是一张地图C++ QTableView和惟一id,c++,qt,qtableview,C++,Qt,Qtableview,我是Qt新手,来自C#Net。我试图复制一个相当简单的程序,作为一个学习工具,我在Qt中用C#编写。我有一个数据模型,它继承QabStretctTableModel并实现: 行数, 列数, 数据, setData, 人头数据 旗帜 我的数据结构是一张地图 std::map<int, CBDataRow> 现在您可以看到UpdateRow()函数在编辑时被调用。该函数应在映射中找到唯一id,并更新其CBDataRow结构的相应成员。我的问题是,我不知道如何从传递到编辑函数的QMode
std::map<int, CBDataRow>
现在您可以看到UpdateRow()函数在编辑时被调用。该函数应在映射中找到唯一id,并更新其CBDataRow结构的相应成员。我的问题是,我不知道如何从传递到编辑函数的QModelIndex对象中获取唯一ID
例如:
用户编辑第3行的“CB名称”单元格。第三行中的数据的唯一ID为100。该值100位于QTableView的隐藏列中,列索引为0。因此,我需要做的只是:
(Psuedo代码)
由于用户正在编辑第1列,如何查找第0列中包含的唯一ID?我建议重新实现模型的index()方法,然后使用调用createIndex(行、列、唯一ID)在那里创建索引
然后,在获得QModelIndex的任何地方,都可以提取unique_id=model_index.internalId() 在我看来,您可以将数据存储在数组中,只需通过index.row()访问即可为元素编制索引: 无需自行定义内部id。
我希望这能对您有所帮助。因为您将数据id隐藏在一个伪列中,我想您需要一个行索引。如果我是对的,为什么不简单地使用一个向量,其中每个元素都包含行的数据?也就是说,为什么在处理第3行数据时不搜索m_数据[3]元素?有什么我不明白的吗?如果我这样做,我将无法对表进行排序,因为第三行将不再对应于id为3的数据。传递到index()中的行、列参数是否来自tableView?如果是这样,我一定不明白,因为这似乎让我的权利回到了我的位置。
bool CBDatabaseModel::setData(const QModelIndex &index, const QVariant &value, int role) {
bool success = false;
if(role == Qt::EditRole) {
success = m_data.UpdateRow(index, value);
}
if(success) {
emit dataChanged(index, index);
return true;
} else {
return false;
}
}
it = m_data.find(unique_id);
it->second.cb_name = value.toString();
QVector<CBDataRow> m_data;
....
bool CBDatabaseModel::setData(const QModelIndex &index, const QVariant &value, int role) {
bool success = false;
if(role == Qt::EditRole && index.row() < m_data.size()) {
success = m_data.at(index.row()).UpdateRow(index.column(), value);
}
if(success) {
emit dataChanged(index, index);
return true;
} else {
return false;
}
}
bool CBDatabaseModel::lessThan(const QModelIndex &left,
const QModelIndex &right) const