use*_*898 3 sorting qt qtreeview
我有简单的模型视图树视图与QSortFilterProxyModel代理来排序列和QStandardItemModel作为
每个列中的模型有字符串得到精细排序但在包含数字(作为字符串)的列中排序错误.
说我有9,12,1(不同栏中的每个数字,当我对它们进行排序时,得到1,12,9或12,1,9,但从未按正确顺序排列.如1,9,12或12,9,1为什么呢?
我也注意到当我逐列排序时,当我尝试获取新列文本时, m_model->item(iSelectedRow,0)->text();
我得到的是初始列文本,但从来没有新的排序列文本.为什么?
Fra*_*eld 12
那是因为默认情况下,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 );
Run Code Online (Sandbox Code Playgroud)
你的第二个问题:什么是m_model?源模型,还是sortfilterproxymodel?前者永远不会通过排序来改变,排序只发生在代理中.
| 归档时间: |
|
| 查看次数: |
5544 次 |
| 最近记录: |