bool TorrentSortModel::lessThan(const QModelIndex & left, const QModelIndex & right) const { Torrent leftItem = static_cast<TorrentModel *>(sourceModel())->torrent(left.row()); Torrent rightItem = static_cast<TorrentModel *>(sourceModel())->torrent(right.row()); if (left.column() == right.column()) { int column = left.column(); switch (column) { case TorrentModel::Name: return leftItem.name().toLower() < rightItem.name().toLower(); case TorrentModel::State: return leftItem.state() < rightItem.state(); case TorrentModel::Size: return leftItem.size() < rightItem.size(); case TorrentModel::Seeders: return leftItem.seedsConnected() < rightItem.seedsConnected(); case TorrentModel::Leechers: return leftItem.leechsConnected() < rightItem.leechsConnected(); case TorrentModel::DownloadRate: return leftItem.downloadRate() < rightItem.downloadRate(); case TorrentModel::Downloaded: return leftItem.downloaded() < rightItem.downloaded(); case TorrentModel::UploadRate: return leftItem.uploadRate() < rightItem.uploadRate(); case TorrentModel::Uploaded: return leftItem.uploaded() < rightItem.uploaded(); case TorrentModel::Ratio: return leftItem.ratio() < rightItem.ratio(); case TorrentModel::Priority: return leftItem.priority() < rightItem.priority(); default: return false; } } else { return false; } }