/
waterstone
/
TaskList_Demo
Обзор
Документация
Войти
/
waterstone
/
TaskList_Demo
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/tasklist_proxy_table_model.cpp
67 строк
2 KB
Peter Sakhno
Sort with table header
20 янв 2026, 22:22
20 янв 2026, 22:22
4ee091e
Код
Авторство
О чём код?
#include "tasklist_proxy_table_model.h" #include "tasklist_table_model.h" TaskListProxyTableModel::TaskListProxyTableModel(QObject* parent) : QSortFilterProxyModel(parent) { } void TaskListProxyTableModel::SetRunStateFilter(std::optional<bool> new_val) { if (m_run_state_filter == new_val) return; m_run_state_filter = new_val; invalidateFilter(); } bool TaskListProxyTableModel::filterAcceptsRow(int src_row, const QModelIndex& src_parent) const { if (!m_run_state_filter) return true; const auto src_model = sourceModel(); if (src_model == nullptr) return true; const auto src_index = src_model->index(src_row, TaskListTableModel::ActionColumn, src_parent); const auto var = src_index.data(Qt::UserRole); if (var.userType() != QMetaType::Bool) return true; return *m_run_state_filter == var.toBool(); } bool TaskListProxyTableModel::lessThan(const QModelIndex& src_l, const QModelIndex& src_r) const { const auto src_model = sourceModel(); if (src_model == nullptr) return false; // Item data should be either // - qint64 for TaskListTableModel::TimestampColumn or // - QString for TaskListTableModel::CaptionColumn or // - bool for TaskListTableModel::ActionColumn const auto var_l = src_model->data(src_l, Qt::UserRole); const auto var_r = src_model->data(src_r, Qt::UserRole); if (var_l.userType() != var_r.userType()) return false; if (var_l.userType() == QMetaType::LongLong) { // TaskListTableModel::TimestampColumn return var_l.toLongLong() < var_r.toLongLong(); } else if (var_l.userType() == QMetaType::QString) { // TaskListTableModel::CaptionColumn return QString::localeAwareCompare(var_l.toString(), var_r.toString()) < 0; } else if (var_l.userType() == QMetaType::Bool) { // TaskListTableModel::ActionColumn return var_l.toBool() < var_r.toBool(); } return false; }