如何使用QSortFilterProxyModel按字母顺序对列表项进行排序

How i can sort a list item by alphabetical order with QSortFilterProxyModel?

本文关键字:列表 排序 顺序 QSortFilterProxyModel 何使用      更新时间:2023-10-16

Hi我已经在此模式中设置了QSortFilterProxyModel属性

int main(int argc, char *argv[])
{
....
ProgramFilterProxyModel programFPModel{};
programFPModel.setSourceModel(&pm);
engine.rootContext()->setContextProperty("programFPModel", &programFPModel);
....
}
ProgramFilterProxyModel::ProgramFilterProxyModel(QObject *parent) :
QSortFilterProxyModel(parent), m_stringaRicerca(""),
m_programListCurrIndex(0)
{
setSortRole(ProgramModel::NameQml);
setDynamicSortFilter(true);
sort(0);
setSortLocaleAware(true);
}

当我在Ubuntu上执行我的应用程序时,项目会按字母顺序正确排序,因为我已将isSortLocaleAware属性设置为true,相反,如果我尝试在带有buildroot操作系统(IMX6微控制器(的嵌入式系统上执行应用程序,项目不会按字母顺序排序。

如果我尝试使用打印

qDebug()<< QLocale::system().language()

我的buildroot操作系统的区域设置是"C",而在ubuntu上的输出是意大利语,这可能是问题所在吗?

如何在没有setSortLocaleAware(true(的情况下按名称和字母顺序对项目进行排序?

我想要的顺序列表与文件列表的排序顺序相同,例如在ubuntu中。

示例:

  • a.txt
  • A.txt
  • à.txt
  • b.txt
  • B.txt

您可以设置默认的区域设置(尽快在main((中(

QLocale::setDefault(QLocale(QLocale::Italian));

上一行只是一个例子。您应该根据用户偏好等设置一个可变的区域设置。

或者,您可以覆盖受保护的方法bool QSortFilterProxyModel::lessThan(),并根据需要比较这些项。请参见自定义排序/筛选模型示例。