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

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

您好,我已将 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 在嵌入式系统上执行我的应用程序OS(IMX6 微控制器)项目未按字母顺序排序。

如果我尝试打印:

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

我的 buildroot 的语言环境 OS 输出是 "C",而不是 ubuntu 是意大利语,也许这是问题所在?

如何在不使用 setSortLocaleAware(true) 的情况下按名称对项目进行排序并按字母顺序排序?

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

示例:

您可以设置默认语言环境(尽快在您的 main() 中设置)

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

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

或者您可以覆盖 the protected method bool QSortFilterProxyModel::lessThan() 并根据需要比较项目。 见 Custom Sort/Filter Model Example.