与 QSortFilterProxyModel 一起使用时 QTableView 中的默认排序顺序

thi*_*ngs 3 qt5 pyqt5

我正在使用自定义 QSortFilterProxyModel 来排序和过滤显示在 QTableView 中的自定义 QAbstractTableModel。

我已经设置了排序和过滤,一切都按预期进行。

现在我想要一些列默认升序排序,一些列默认降序排序。对于“默认”,我的意思是如果第一次单击列标题,这应该是默认的排序顺序(正如我所说,它因列而异)。

我可以通过根据列在自定义 QAbstractTableModel 中实现它来实现此目的,但列标题中显示的排序指示符将与某些列的排序顺序不匹配。

我想设置默认排序顺序可能应该在 QTableView 中完成,但我不知道如何做。

任何帮助将非常感激。

pep*_*ppe 5

要设置视图在您第一次单击标题部分时执行的排序,您可以覆盖headerData您的模型,并履行该Qt::InitialSortOrderRole角色:

QVariant MyModel::headerData(int section, Qt::Orientation orientation, 
                             int role) const 
{
    if (role == Qt::InitialSortOrderRole)
        return Qt::DescendingOrder; // or maybe Ascending

    return QSqlTableModel::headerData(section, orientation, role);
}
Run Code Online (Sandbox Code Playgroud)

不要忘记调用父headerData()方法,它不一定是它QSqlTableModel取决于您扩展的模型。