Qt:在数字字符串上使用QSortFilterProxyModel并获取错误的列文本时排序错误

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?前者永远不会通过排序来改变,排序只发生在代理中.