[英]qt5 view different roles of model data
我想使用QTableView来显示项目的不同角色,例如,第1列显示DisplayRole数据,第2列显示UserRole,第3列显示UserRole + 1,依此类推
我是通过创建自己的项目委托并将其分配给适当的列来创建的。 但是,要访问同一项目,代表必须访问其兄弟姐妹。 例如,这是我的setEditorData函数:
void UserRoleDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
QModelIndex baseIndex = index.sibling(index.row(),0);
QVariant v = baseIndex.data(Qt::UserRole);
if(v.isValid())
static_cast<QLineEdit*>(editor)->setText(v.toString());
}
现在,已硬编码第0列包含实际对象,而其他列仅通过同级函数访问该对象。 但是,我担心它的脆弱之处在于更改列顺序会破坏它。
有很明显的方法可以解决这个问题,但是我只是想知道我是否采用了正确的方法。 有没有更好的选择来显示同一项目的不同方面?
为了避免可能的代码重写,您可以使用简单的列号枚举。 例如:
enum ColumnNumber {
Base,
Sub1,
Sub2
}
在您的代表的代码中:
[..]
QModelIndex baseIndex = index.sibling(index.row(), Base);
因此,如果需要更改列顺序,则只需更改枚举值的顺序即可。 其余代码将按原样正常工作。
WRT用于项目委托使用-看起来很奇怪。 此类事情以前是在模型类中完成的,尤其是在QAbstractItemModel::data(...)
函数中,并与Qt::EditRole
角色一起使用。 例如:
QVariant Model::data(const QModelIndex &index, int role) const
{
if (role == Qt::EditRole) {
// Get the data that stored in the first column
// ..
return data;
}
[..]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.