Юрий
Dec. 30, 2021, 12:45 a.m.

Сортировка по дате и времени QSortFilterProxyModel QSqlRelationalTableModel

Добрый вечер.

Хочу сортировать в QTableView по заголовку колонки по дате и времени, сейчас сортирует как строку.

Данные беру из БД SQLite, тип записи DATETIME.

  1. void Equipment::initTableGoods()
  2. {
  3. dataBase->connOpen();
  4. modelGoods = new QSqlRelationalTableModel(this);
  5. modelGoods->setTable("goods");
  6. modelGoods->setFilter("goods.active = '1'");
  7.  
  8. modelGoods->setRelation(1, QSqlRelation("ref_type", "id", "name"));
  9. modelGoods->setRelation(2, QSqlRelation("ref_goods", "id", "name"));
  10. modelGoods->setRelation(3, QSqlRelation("ref_mol", "id", "name"));
  11. modelGoods->setRelation(
  12. 8, QSqlRelation("ref_condition", "id_ref_condition", "name_ref_condition"));
  13. modelGoods->setRelation(12,
  14. QSqlRelation("ref_location", "id_ref_location", "name_ref_location"));
  15.  
  16.  
  17. modelGoods->setHeaderData(1, Qt::Horizontal, tr("Тип"));
  18. modelGoods->setHeaderData(2, Qt::Horizontal, tr("Наименование"));
  19. modelGoods->setHeaderData(3, Qt::Horizontal, tr("МОЛ"));
  20. modelGoods->setHeaderData(4, Qt::Horizontal, tr("MAC"));
  21. modelGoods->setHeaderData(5, Qt::Horizontal, tr("IP"));
  22. modelGoods->setHeaderData(6, Qt::Horizontal, tr("S/N"));
  23. modelGoods->setHeaderData(7, Qt::Horizontal, tr("Инвентарный номер"));
  24. modelGoods->setHeaderData(8, Qt::Horizontal, tr("Статус"));
  25. modelGoods->setHeaderData(9, Qt::Horizontal, tr("Имя устройства в сети"));
  26. modelGoods->setHeaderData(10, Qt::Horizontal, tr("Статус"));
  27. modelGoods->setHeaderData(11, Qt::Horizontal, tr("Расположение"));
  28. modelGoods->setHeaderData(12, Qt::Horizontal, tr("Расположение"));
  29. modelGoods->setHeaderData(13, Qt::Horizontal, tr("Доступность"));
  30. modelGoods->setHeaderData(15, Qt::Horizontal, tr("Комментарий"));
  31. modelGoods->setHeaderData(16, Qt::Horizontal, tr("Последние обновления"));
  32.  
  33. modelGoods->select();
  34.  
  35. sort->setSourceModel(modelGoods);
  36. ui->tableView->setModel(sort); // Устанавливаем модель на TableView
  37. ui->tableView->setColumnHidden(0,
  38. true); // Скрываем колонку
  39. ui->tableView->setColumnHidden(10,
  40. true); // Скрываем колонку
  41. ui->tableView->setColumnHidden(11,
  42. true); // Скрываем колонку
  43. ui->tableView->setColumnHidden(14,
  44. true); // Скрываем колонку
  45. // Разрешаем выделение строк
  46. ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
  47. // Устанавливаем режим выделения лишь одной строки в таблице
  48. ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
  49. // Устанавливаем размер колонок по содержимому
  50. ui->tableView->resizeColumnsToContents();
  51. ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); // Запрещаем редактирование
  52. ui->tableView->horizontalHeader()->setStretchLastSection(
  53. true); // Растягиваем последнюю колонку по всему tableView
  54.  
  55. dataBase->connClose();
  56. }

2

Do you like it? Share on social networks!

1
Evgenii Legotckoi
  • Dec. 30, 2021, 8:35 p.m.
  • The answer was marked as a solution.

Добрый день.

Наследуйте модель сортировки от QSortFilterProxyModel и переопределите метод QSortFilterProxyModel::lessThan таким образом, чтобы вы забирали через индексы дату и время из модели, создавали бы объекты QDateTime и сравнивали бы их друг с другом, тогда это будет работать. Но конкретно для этой колонки, для всех остальных вызывайте методы базового класса.

    Comments

    Only authorized users can post comments.
    Please, Log in or Sign up
    • Last comments
    • AK
      April 1, 2025, 11:41 a.m.
      Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
    • Evgenii Legotckoi
      March 9, 2025, 9:02 p.m.
      К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
    • VP
      March 9, 2025, 4:14 p.m.
      Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
    • ИМ
      Nov. 22, 2024, 9:51 p.m.
      Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
    • Evgenii Legotckoi
      Oct. 31, 2024, 11:37 p.m.
      Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup