繁体   English   中英

qt5查看模型数据的不同角色

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM