Юрий29 декабря 2021 г. 12:45

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

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

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

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

void Equipment::initTableGoods()
{
    dataBase->connOpen();
    modelGoods = new QSqlRelationalTableModel(this);
    modelGoods->setTable("goods");
    modelGoods->setFilter("goods.active = '1'");

    modelGoods->setRelation(1, QSqlRelation("ref_type", "id", "name"));
    modelGoods->setRelation(2, QSqlRelation("ref_goods", "id", "name"));
    modelGoods->setRelation(3, QSqlRelation("ref_mol", "id", "name"));
    modelGoods->setRelation(
            8, QSqlRelation("ref_condition", "id_ref_condition", "name_ref_condition"));
    modelGoods->setRelation(12,
                            QSqlRelation("ref_location", "id_ref_location", "name_ref_location"));


    modelGoods->setHeaderData(1, Qt::Horizontal, tr("Тип"));
    modelGoods->setHeaderData(2, Qt::Horizontal, tr("Наименование"));
    modelGoods->setHeaderData(3, Qt::Horizontal, tr("МОЛ"));
    modelGoods->setHeaderData(4, Qt::Horizontal, tr("MAC"));
    modelGoods->setHeaderData(5, Qt::Horizontal, tr("IP"));
    modelGoods->setHeaderData(6, Qt::Horizontal, tr("S/N"));
    modelGoods->setHeaderData(7, Qt::Horizontal, tr("Инвентарный номер"));
    modelGoods->setHeaderData(8, Qt::Horizontal, tr("Статус"));
    modelGoods->setHeaderData(9, Qt::Horizontal, tr("Имя устройства в сети"));
    modelGoods->setHeaderData(10, Qt::Horizontal, tr("Статус"));
    modelGoods->setHeaderData(11, Qt::Horizontal, tr("Расположение"));
    modelGoods->setHeaderData(12, Qt::Horizontal, tr("Расположение"));
    modelGoods->setHeaderData(13, Qt::Horizontal, tr("Доступность"));
    modelGoods->setHeaderData(15, Qt::Horizontal, tr("Комментарий"));
    modelGoods->setHeaderData(16, Qt::Horizontal, tr("Последние обновления"));

    modelGoods->select();

    sort->setSourceModel(modelGoods);
    ui->tableView->setModel(sort); // Устанавливаем модель на TableView
    ui->tableView->setColumnHidden(0,
                                   true); // Скрываем колонку 
    ui->tableView->setColumnHidden(10,
                                   true); // Скрываем колонку
    ui->tableView->setColumnHidden(11,
                                   true); // Скрываем колонку
    ui->tableView->setColumnHidden(14,
                                   true); // Скрываем колонку
    // Разрешаем выделение строк
    ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
    // Устанавливаем режим выделения лишь одной строки в таблице
    ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
    // Устанавливаем размер колонок по содержимому
    ui->tableView->resizeColumnsToContents();
    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); // Запрещаем редактирование
    ui->tableView->horizontalHeader()->setStretchLastSection(
            true); // Растягиваем последнюю колонку по всему tableView

    dataBase->connClose();
}

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
1

Добрый день.

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

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Timeweb

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Посмотреть Хостинг
Поделиться в социальных сетях
Donate

Проект EVILEG перешёл на некоммерческую основу и будет развиваться исключительно на энтузиазме создателя сайта, энтузиазме пользователей, пожертвованиях и реферальной системе хостинга

Спасибо за вашу поддержку

Доступные способы поддержки проекта

PayPal

PatreonYooMoneyПодробнее
AB

C++ - Тест 006. Перечисления

  • Результат:30баллов,
  • Очки рейтинга-10
МХ

C++ - Тест 003. Условия и циклы

  • Результат:42баллов,
  • Очки рейтинга-8
AB

C++ - Тест 005. Структуры и Классы

  • Результат:50баллов,
  • Очки рейтинга-4
Популярные публикации за последние 90 дней
Последние комментарии

EVILEG-CORE. Кэширование свойств объектов моделей с помощью model_cached_property

Здравствуйте. В общем меня интересует такой вопрос. Я пробовал это на Like , Dislike. Как я понимаю если не перевалидировать кеш то ничего не изменится на странице. Вернётся значение из кэша? От…
A

Qt/C++ - Урок 006. QSqlQueryModel - Таблицы в Qt с помощью SQL-запросов

Здравствуйте! Подскажите как сделать запрос к базе SQLite с двумя параметрами, в итоге нужно получить не список строк, а только факт наличия строк, соответсвующи именно двум условиям. В SQL…
A

Django - Урок 011. Добавление комментариев на сайт с Django

https://mir74.ru/27323-12-krasavic-sdelali-podarok-stalnomu-gigantu.-rabotnicy-mmk-snyalis-dlya-yubileynogo-fotokalendarya.html
a

Django - Урок 011. Добавление комментариев на сайт с Django

I read that Post and got it fine and informative.https://aflife.ru/

Django - Урок 023. Like Dislike система с помощью GenericForeignKey

Хорошо. Большое спасибо. Посмотрю что из этого получится.
Сейчас обсуждают на форуме
o

Запрос на изменение БД с помощью оператора UPDATE и странное поведение QTableView

или запрос к базе так https://www.w3schools.com/sql/sql_ref_order_by.asp или сортировка в модели через прокси модель https://doc.qt.io/qt-5/qsortfilterproxymodel.html
o

Как очичтисть очередь событий для конпки

нужно сделать связку qml и c++, тяжелые задачи отправляются на обработку в с++, в qml остаются только быстрые. и у кнопок есть свойство enabled: true\false при запуске\остановке з…
A

Развертывание QML приложения

Полностью согласен, что пример не удачный, но я так как раз попытался выразить то, что вы далее описали с примером со скадой, часть .dll и часть .qml с интерпритацией. И в Вашем ответе я ув…
АБ

Sorting the added QML elements in the ListModel

I am writing an alarm clock in QML, I am required to sort the alarms in ascending order (depending on the date or time (if there are several alarms on the same day). I've done the sorting …
EK

HTTP server на Qt

Давно было, уже не помню как, но разрулил. Спасибо :)
О нас
Услуги
© EVILEG 2015-2022
Рекомендует хостинг TIMEWEB