Реклама

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

РуководствоQtQSqlRelationalTableModel, QSqlTableModel, QSqlTableModel example, фильтр1996

Продолжая работу с таблицами в 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

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

Итог

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

Реклама

Комментарии

Комментарии

Только авторизованные пользователи могут оставлять комментарии.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
Последние комментарии
  • EVILEG
  • 13 июля 2017 г. 2:12

Qt/C++ - Урок 023. Перетаскивание QGraphicsItem на QGraphicsScene мышью

Ну например так можете сделать.void MoveItem::mousePressEvent(QGraphicsSceneMouseEvent *event){ if (QApplication::mouseButtons() == Qt::RightButton) { this->deleteLa...

  • Mark
  • 13 июля 2017 г. 1:26

Qt/C++ - Урок 023. Перетаскивание QGraphicsItem на QGraphicsScene мышью

Подскажите пожалуйста как в данном проекте по перетаскиванию организовать удаление объекта со scene методом delete item, допустим при щелчке ПКМ по объекту QGraphicsScene. Мои попытки оказалис...

  • EVILEG
  • 10 июля 2017 г. 21:34

Qt/C++ - Урок 048. QThread - работа с потоками с помощью moveToThread

А что делали? Повторяете урок или как? Пытались просто скачать проект в конце статьи и запустить?

Qt/C++ - Урок 048. QThread - работа с потоками с помощью moveToThread

У меня происходит переполнение счетчика count, появляется ошибка malloc(): memory corruption (fast). Не подскажите, как с этим бороться?

  • EVILEG
  • 9 июля 2017 г. 2:07

GameDev на Qt - Урок 3. Уничтожение противников

Поэтому в пятом уроке есть исходники всего проекта )))). Вообще, все эти материалы были не предыдущей версии сайта, которая на WordPress. Во время переноса мог что-то потерять.

Сейчас обсуждают на форуме

тестирование классов в QT

это вопрос.

Как реализовать отправку e-mail

Возможно что уже и нет необходимости в почтовом клиенте, но в своё время так же столкнулся с данной проблемой в QT. Нашел один интересный проект под названием libqxt, там реализовано дов...

  • Asteri
  • 14 июля 2017 г. 12:23

css

Делюсь, может, пригодится когда-нибудь) QTableView QHeaderView { background-color: #ffffff; } Вот так эта проблема лечится, градиент задать не получается, но хоть...

  • EVILEG
  • 12 июля 2017 г. 19:52

QSqlQuery выполнение sql запросов из файла

Мне думается, что это уже будет дело вкуса и вашего взгляда на проект. Если Вы действительно собираетесь просто скармливать своему софту SQL скрипты, которые должны будут выполняться для...

QML Canvas + Line. Bug?

Вот оно что, значит не баг) Спасибо