我有简单的模型视图树视图,带有 QSortFilterProxyModel 代理来对列进行排序,并使用 QStandardItemModel 作为模型
在每列中都有字符串排序良好,但在包含数字(作为字符串)的列中排序错误。
假设我有 9,12,1 (当我对它们进行排序时,不同列中的每个数字我得到 1,12,9 或 12,1,9,但顺序从来都不是正确的。
像 1,9,12 或 12,9,1 为什么?
我还注意到,当我按列排序时,当我尝试使用以下命令获取新列文本时m_model->item(iSelectedRow,0)->text();
我得到了初始列文本,但没有得到新的排序列文本。为什么 ?
这是因为默认情况下,QSortFilterProxyModel 按 DisplayRole 排序。如果返回一个字符串,它将对该字符串进行排序。
要让模型按其他值排序,请在源模型中定义自定义排序角色并将其设置在代理上:
class MyModel {
...
enum Role {
SortRole=Qt::UserRole
};
QVariant data( ... ) const {
...
switch ( role ) {
case Qt::DisplayRole:
return value as string;
case SortRole:
return value as int;
}
}
};
...
sortfilterproxy->setSortRole( MyModel::SortRole );
你的第二个问题:m_model是什么?源模型,还是 sortfilterproxy 模型?前者不会因排序而改变,排序仅发生在代理中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)