tra*_*gan 0 sorting qt qsort qlist
我有QList<m_User>与
m_User {
QString status;
QString firstName;
QString lastName;
QDate joinDate;
QDate leaveDate;
}
Run Code Online (Sandbox Code Playgroud)
status这里可以是:terminated, in test, requested, activated。
排序顺序status应该是:activated-> terminated-> requested->in test
该 QList 应按照以下顺序排序:
所以结果应该是这样的
----------------------------------------------------------
| firstName | lastName | status | joinDate | leaveDate |
----------------------------------------------------------
| A | C |activated | bla | bla |
| A | D |activated | bla | bla |
| B | E |activated | bla | bla |
| A | F |terminated| bla | bla |
| A | G |terminated| bla | bla |
| B | H |terminated| bla | bla |
| A | I |requested | bla | bla |
| B | I |requested | bla | bla |
| B | K |requested | bla | bla |
| A | L | in test | bla | bla |
| B | L | in test | bla | bla |
| B | M | in test | bla | bla |
Run Code Online (Sandbox Code Playgroud)
您可以将 lessThen 函数添加到您的类/结构中,然后根据需要为 qSort 创建转发器。例子:
class m_User {
public:
bool operator<(const m_User other) const {
return a<other.a;
}
};
template <typename T>
struct ForwardLessThen
{
bool operator()(const T* a, const T* b) const
{
return *a < *b;
}
};
qSort(list.begin(), list.end(), ForwardLessThen<m_User>());
Run Code Online (Sandbox Code Playgroud)
如果您使用 C++11/14,则可以使用 lambda
QList<const m_User*> l;
qSort(l.begin(), l.end(),
[](const m_User* a, const m_User* b) -> bool { return a->firstName() < b->firstName(); //implement your logic here
});
Run Code Online (Sandbox Code Playgroud)
对于 Qt5,qSort 实际上已被弃用,您应该使用 std::sort 函数。
std::sort(container.begin(), container.end(), qLess<T>());
Run Code Online (Sandbox Code Playgroud)
编辑:或者如果您计划使用某种视图模型(如 ListView),您甚至可以实现自己的QSortFilterProxyModel
| 归档时间: |
|
| 查看次数: |
9360 次 |
| 最近记录: |