Ага. Теперь более-менее понятно стало. Стал делать вторым способом - переписал метод select примерно так:
bool QSqlSelectCursor::select(const QString& filter, const QSqlIndex& sort)
{
if (sort.count() > 0)
{
QString query = d->query;
int pos = query.find("ORDER BY ", 0, false);
if (pos == -1)
query.replace(";", " ");
else
query = query.left(pos);
query += "ORDER BY " + sort.toString();
d->query = query;
}
bool ret = QSqlCursor::exec( d->query );
if ( ret && !d->populated )
populateCursor();
return ret;
}
Но тут возникла еще одна интересная проблемка. При клике на заголовках грида происходит сортировка по возрастанию (все вроде как надо), но при повторном клике на том же заголовке происходит опять сортировка по возрастанию, хотя по идее должна чередоваться сортировка по возрастанию и убыванию.
Поковырявшись, решил ради интереса в проект засунуть "двойника" класса QSqlCursor, с другим именем, но с той же реализацией, чтобы дебаггером пройтись, посмотреть, как там чего изнутри. В общем, с этим "двойником" та же история - сортировка только по возрастанию.
Не связано ли это как-нибудь с классом QSqlCursorManager, т.к. клики по заголовкам приводят к вызову его методов?
добавлено спустя 11 часов 15 минут: Все, решил эту проблему. Тут-то и пригодились те самые setSort() и sort(). Вроде теперь все работает как надо.