gpt4 book ai didi

c++ - QSortFilterProxyModel 按日期排序

转载 作者:行者123 更新时间:2023-11-27 23:02:15 27 4
gpt4 key购买 nike

我想按日期对表格进行排序。问题是它们被解释为字符串,因此我的本地日期格式排序错误,如 26。九月 大于 16。十一月,因为 26 > 16

无论如何,我已经建立了自己的模型并像这样尝试:

QVariant MyModel::data(const QModelIndex &index, int role) const
{
if(role == Qt::UserRole)
{
if(index.column() == 5) // Date
return QSqlTableModel::data(index, role).toDate();
}

if(role == Qt::DisplayRole)
{
if(index.column() == 5) // Date
return QSqlTableModel::data(index.role).toDate().toString("dd MMMM yyyy");
}
}

我这样设置 sortRole:

proxyModel->setSortRole(Qt::UserRole);

实际上调用了相应的行,但现在我根本无法对表格进行排序。它只是没有回应。相应列的箭头(表示升序或降序)正在变化,但数据没有变化。当然,我将其余的设置为:

proxyModel->setDynamicSortFilter(true);
proxyModel->setSourceModel(myDBModel);
proxyModel->setFilterKeyColumn(1);
proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);

如果我不设置 sortRole 至少我可以按其他列正确排序。我在这里做错了什么?我是否必须实现其他功能或其他功能?我环顾了互联网,但我发现的只是多年前对整数进行排序的问题,从来没有日期:(

最佳答案

我是个白痴(事实!)

Qt 已经提供了我所需要的一切,这只是我犯了一个愚蠢的错误。两件事,真的:

   if(role == Qt::UserRole)
{
if(index.column() == 5)
return QDate::fromString(QSqlTableModel::data(index, Qt::DisplayRole).toString(), "yyyy-MM-dd"); // 1st Mistake, no correct conversion. I always got QVariant(invalid)
// 1.1 Mistake, also, grab the data from Qt::DisplayRole, not from Qt::UserRole!

return QSqlTableModel::data(index, Qt::DisplayRole); // 2nd Mistake. Because I didn't add that line I couldn't sort it on any other column anymore. When I finally could sort it on the dates I couldn't on the other columns, then I thought about adding this line et voila!
}

非常感谢您友好而快速的回答,但这次问题存在于椅子和键盘之间。

关于c++ - QSortFilterProxyModel 按日期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26574923/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com