Евгений Легоцкой30 августа 2015 г. 3:40

Qt/C++ - Урок 007. Фильтр для записей в QSqlTableModel

Продолжая работу с таблицами в Qt , хотелось бы освятить тот момент, как установить фильтр на модель представления данных в QSqlTableModel или в QSqlRelationalTableModel . Поэтому для описания процесса установки фильтра за основу был взят программный код из урока по QSqlTableModel .

Программный код был написан в QtCreator 3.3.1 на основе Qt 5.4.1.

Структура проекта

В данном уроке структура проекта остается аналогичной проекту из урока по QSqlTableModel.

mainwindow.ui

Внесём дополнительные объекта в главное окно приложения, а именно добавим следующие элементы:

  • dateEditFROM - начальная дата;
  • dateEditTO - конечная дата;
  • timeEditFROM - начальное время;
  • timeEditTO - конечное время;
  • pushButton - кнопка, по нажатию которой будет применяться фильтр.

mainwindow.h

В заголовочном фильтре добавляется СЛОТ для обработки нажатия кнопки, в который будет зашит фильтр для таблицы.

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

 ***

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

 ***

private slots:
    void on_pushButton_clicked();

 ***

};

#endif // MAINWINDOW_H

mainwindow.cpp

В данном файле изменяется частично лишь один метод и добавляется СЛОТ для обработки нажатия кнопки.

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ***
}

MainWindow::~MainWindow()
{
    delete ui;
}

/* Метод для инициализации модеи представления данных
 * */
void MainWindow::setupModel(const QString &tableName, const QStringList &headers)
{
    ***
}

void MainWindow::createUI()
{
    ***

    /* Устанавливаем в объекты даты для фильтра текущую дату
     * */
    ui->dateEditFROM->setDate(QDate::currentDate());
    ui->dateEditTO->setDate(QDate::currentDate());
    
    /* Вызываем метод, в котором устанавливается фильтр на таблицу
     * */
    on_pushButton_clicked();
}

/* Метод для обработки нажатия кнопки
 * и по совместительству фильтр для модели
 * представления табличный данных
 * */
void MainWindow::on_pushButton_clicked()
{
    /* Установка фильтра представляет из себя часть SQL запроса
     * который начинается после слова WHERE в SQL запросе.
     * Следовательно для специалистов, работавших с SQL не составит труда
     * сформировать нужный фильтр
     * */
    model->setFilter(QString( TABLE_DATE " between '%1' and '%2' and "
                              TABLE_TIME " between '%3' and '%4'")
                     .arg(ui->dateEditFROM->date().toString("yyyy-MM-dd"),
                          ui->dateEditTO->date().toString("yyyy-MM-dd"),
                          ui->timeEditFROM->time().toString("hh:mm:ss"),
                          ui->timeEditTO->time().toString("hh:mm:ss")));
    model->select();
}

Примечание. Для установки фильтра в QSqlQueryModel необходимо просто задать соответствующую фильтрацию в SQL запросе, который отправляется в данную модель.

database.h и database.cpp

В данные файлы не вносятся абсолютно никакие изменения.

Итог

В результате у Вас должно получится приложение следующего вида с возможностью фильтрации записей в таблице по дате и времени.

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

Комментарии

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

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

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

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

Посмотреть Хостинг
VD

C++ - Тест 001. Первая программа и типы данных

  • Результат:73баллов,
  • Очки рейтинга1
Ds

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

  • Результат:64баллов,
  • Очки рейтинга-1
o

C++ - Тест 001. Первая программа и типы данных

  • Результат:86баллов,
  • Очки рейтинга6
Последние комментарии
s

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

все, я со всем разобрался!) Извините!)
s

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

Доброго времени суток!) Я случайно набрел на вашу статью, и она помогла мне решить некоторые мои трудности, я прошел за вами по шагам, в попытках адаптировать это под себя, и возник вопрос. У ва…
R

Qt/C++ - Урок 026. Применение CallBack функции

Спасибо огромное!

Qt/C++ - Урок 026. Применение CallBack функции

Если не объявлять статической, то не соберётся. Не получится сделать привязку метода. Дело в том, что в процессе компиляции производится сборка с указанием конкретных участков кода в данном…
  • Anton
  • 4 августа 2020 г. 2:25

Django - Урок 039. Добавление личных сообщений и чатов на сайте - Часть 2 (Счётчик диалогов и чатов с непрочитанными сообщениями)

Может быть посоветуете как добавить необязательное поле + прокинуть его во вьюху что бы можно было отправлять небольшие документы.?
Сейчас обсуждают на форуме
s

Ключевое слово class

Если закоментить include , то ошибка будет такая : C2027(использование неопределённого типа "Autorization"). Если убрать ключевое слово class , то ошибки будет 3 : Ошибка C2143 син…

Как в Android открыть свернутое приложение?

Может быть поможет это

Динамическое изменение цветовой схемы material

как по мне, темы типа material хороши если вас полностью устраивает их стил, если пишете кастомный дизайн то имеет смысл отказаться

QT QGraphics преобразование координат

Добрый день. Да, можно перевести в координаты экрана. Используйте метод mapToGlobal() . В Qt документации на класс приводятся методы, которые внедрены в конкретном классе. В нач…
М

QML связь с моделью в C++

Спасибо.
О нас
Услуги
© EVILEG 2015-2020
Рекомендует хостинг TIMEWEB