Реклама

Поиск

Модель, шаблон и представление в Django

TutorialDjangomodel, template, view257

В Django используется модульная система приложения, когда одно приложение состоит из нескольких приложений, отвечающих каждое за свой функционал. Как Вы успели заметить, на момент написания статьи, на сайте присутствует раздел "База Знаний", в котором присутствует несколько разделов, по которым уже разделены статьи.

При работе с предыдущим сайтом на Wordpress, бестолково тратилось время на добавление новых статей в список уроков по Qt. На данном же сайте страница является автоматически генерируемой и при сохранении новой статьи со статусом опубликовано, данная статья автоматически попадает в список соответствующего раздела.

Предлагаю разобраться, как это реализуется в минимальном варианте на примере EVILEG COM.

Qt/C++ - Урок 005. QSqlRelationalTableModel - Работаем со связными таблицами

TutorialQtQSqlRelationalTableModel, QSqlRelationalTableModel example, qt, qt таблицы, sql, sqlite365

В Qt для представления таблиц поля, которых связаны внешними ключами с другими таблицами базы данных, может применяться QSqlRelationalTableModel , которая является более продвинутым вариантом класса QSqlTableModel ,  который был рассмотрен в предыдущей статье .

Данный класс позволяет устанавливать связи между таблицами и подменять в представлении значения формируемой таблицы значениями из связных таблиц.

В данной статье рассматривается вариант из двух таблиц. В одной из таблиц содержится информация об устройствах (Имя хоста и IP адрес), а во второй таблице ID этих устройств, по которым в второй таблице будут подставляться Имя хоста и IP адрес соответственно устройствам.

Структура проекта для QSqlRelationalTableModel

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

Проект для этого урока является доработанной версией предыдущей статьи и остается неизменной.

Реклама

Ruby on Rails - Генерирование ресурсов

TutorialRubyRuby, Ruby on Rails, user, web, генерирование100

После того, как удалось получить в предыдущей статье рабочий вариант веб-приложения на Ruby, пошёл разбираться дальше с разработкой и генерированием ресурсов, а также с изучением архитектуры веб-приложений Ruby on Rails. Благо данный фреймворк использует паттерн MVC, который также используется в  Qt, поэтому в целом с пониманием архитектуры проблем возникнуть не должно.

В процессе поиска источников информации в стиле "Ruby для чайников", "Ruby за 21 день" и т.д. я натолкнулся, по-видимому, на весьма замечательный ресурс , который является переводом книги Ruby on Rails Tutorial by Michael Hartl. Первое впечатление от книги оказалось положительным. Так что дальнейшее самообучение, пожалуй, буду проводить по этому ресурсу.

Из первых плюсов, которые обнаружил, так это упоминание среды разработки RubyMine от JetBrains. Я уже знаком с такими продуктами, как WebStorm, PHPStorm, Intellij IDEA и основанной на ней AndroidStudio, поэтому на данный момент остановил свой выбор на этой среде разработки. Что странно Google по запросам Ruby IDE и аналогичным, не показал информации об этой среде разработки, видимо ещё не раскрутились.

В общем полон мир открытий чудных для новичка. Ну а теперь приступим непосредственно к генерированию ресурсов, которые будут работать на основе MVC паттерна.

Qt/C++ - Урок 015. QTableWidget или Как сделать таблицу с чекбоксами

TutorialQtQt, Qt Таблица, QTableWidget, QTableWidget example, QTableWidget пример511

Использование QTableWidget будет первым способом, который посоветуют Вам для создания таблиц с чекбоксами на Qt. Поэтому давайте рассмотрим и этот вариант работы с таблицами в Qt и конечно же применим чекбоксы.

Итак, чтобы урок был более приближен к реальности, захватим немного программного кода из урока по QDataWidgetMapper . А именно возьмём класс для работы с базой данных, чтобы уж сразу делать таблицу из базы данных. После чего сделаем форму главного окна приложения и выведем данные из таблицы с отображением чекбоксов. Естественно, при включении приложения таблица база данных будет создана и заполнена несколькими записями, которые мы и будем выводить в виджет.

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

Структура проекта для QTableWidget

Предлагаю ознакомиться со структурой проекта:

  • QTableWidgetExample.pro - профайл;
  • mainwindow.h - заголовочный файл основного окна приложения;
  • mainwindow.cpp - исходный код окна;
  • main.cpp - основной исходный файл, с которого стартует приложение;
  • mainwindow.ui - формочка основного окна приложения;
  • database.h - заголовочный файл вспомогательного класса, применяющегося для работы с информацией, которая помещена в базу данных;
  • database.cpp - исходный файл вспомогательного класса, применяющегося для работы с информацией, которая помещена в базу данных;

Qt/C++ - Урок 016. Как установить QCheckBox в центре ячейки QTableWidget

TutorialQtqcheckbox, qcheckbox center, Qt, QTableWidget293

Одна из первых проблем в работе с QTableWidget, которую пытаются решить, начавшие работать с этим виджетом - это установка QCheckBox в середине ячейки. Дело в том, что в стандартном чекбоксе в QTableWidget чекбокс привязан к левому краю ячейки, а правая часть отдаётся для пояснительного текста. Но текста может и не быть, а область всё равно остаётся. Но при этом QTableWidget позволяет устанавливать в свои ячейки виджеты, чем мы и воспользуемся для решения этой проблемы.

Данная статья является расширением предыдущей статьи по работе с QTableWidget , поэтому для просмотра полного кода проекта рекомендую обратиться также и к той статье. В данной статье приводится лишь код, необходимый для решения поставленной задачи.

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

Структура проекта для QCheckBox center

Структура проекта остаётся такой же, как и в предыдущей статье .

mainwindow.ui

Форма окна для приложения с QCheckBox

В окне главного приложения будут помещены:

  • QTableWidget
  • QLable

Реклама

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

TutorialQtQSqlQueryModel, qsqlquerymodel example, qt, qt таблицы, query417

Использование QSqlQueryModel для формирования таблиц в Qt является наиболее хардкорным вариантом с наиболее низким уровнем абстракции, чем использование QSqlTableModel или QSqlRelationalTableModel . Но при всём при этом и наиболее гибкий вариант, который требует более глубокого знания языка SQL-запросов. В предыдущей статье были построены две таблицы:

  • Основная , в которой были колонки Дата, Время, Имя Хоста, IP-адрес.
  • Таблица устройств, в которой были колонки Имя Хоста и IP-адрес.

В Основной таблице в колонках Имени Хоста и IP-адреса указывались ID-устройств, по которым проводилась подстановка данных из Таблицы устройств. В данной статье структура первой таблицы и следовательно таблицы будут выглядеть иначе:

  • Основная , в которой были колонки Дата, Время, ID устройства.
  • Таблица устройств, в которой были колонки Имя Хоста и IP-адрес.

Генерация Основной таблицы в Приложении будет производиться SQL-запросом и таблица будет иметь соответственно колонки Дата, Время, Имя Хоста и IP-адрес.

QML - Урок 015. Разработка QML Data Mapper - Аналог QDataWidgetMapper

TutorialQMLQML, Qt, QDataWidgetMapper, mapper, QMLDataMapper92

В процессе переноса GUI одной софтины с QWidgets на QML обнаружилось отсутствие аналога QDataWidgetMapper для QML . Данный факт был несколько портящим настроение. Но делать было нечего, кроме как искать другие способы реализации или делать полностью свой велосипед для этого, свой Qml Data Mapper.

Тем не менее поиски на просторах сети дали свои результаты в качестве примера 2011 года от разработчиков Nokia по реализации SQL Widget Mapper для BlackBerry на основе Cascades (фреймворка для native разработки на QML Qt под BlackBerry, соответственно). Путём вечерней медитации над данным примером удалось перепилить код для нынешнего QML Qt , который вполне неплохо будет чувствовать себя как при работе под Desktop, так и при работе под Android, (кроссплатформенность как ни как).

Для демонстрации работы QML Data Mapper будет написано приложение, которое работает с базой данных SQLite. При каждом запуске приложение записывает несколько строк в базу данных, из которой данные забираются при помощи модели данных наследованной от QSqlQueryModel и отображаются в QML TableView. В главном окне приложения присутствует кнопка, по нажатию которой вызывается диалоговое окно, в котором отображается информация о первой строке таблицы. При двойном клике по одной из строк таблицы также вызывается диалоговое окно, но с информацией об этой строке. Также в диалоговом окне присутствуют кнопки для пролистывания информации из таблицы.

QML - Урок 016. База данных SQLite и работа с ней в QML Qt

TutorialQMLБаза данных, SQLite, Qt, QML, Android, DataBase, Model, View, MVC434

Небольшой пример по работе с базой данных в QML Qt . В данном уроке сводится воедино информация о применении сигналов и слотов в QML Qt , о доступе к C++ классам из QML слоя, реализации интерфейса приложения на QML, а также о реализации модели/представлении для таблицы базы данных.

База данных содержит таблицу со списком людей, в которой имеется четыре колонки:

  • id (INTEGER) - уникальный номер записи;
  • FirstName (VARCHAR (255)) - Имя;
  • SurName (VARCHAR (255)) - Фамилия;
  • Nik (VARCHAR (255)) - Ник.

Приложение должно реализовывать удаление и добавление записей в базу данных через интерфейс приложения. Для добавления записей в Базу данных будет использоваться три поля для ввода данных и кнопка, которая инициализирует добавление данных в базу данных SQL . Добавление записей в таблицу осуществляется через класс обёртку предназначенным для этого методом.Также в приложении присутствует класс ListModel , который реализует модель представления данных для отображения информации в TableView в слое QML.

Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце

TutorialQtQSqlTableModel, Qt, paint127

В уроке по работе с QSqlTableModel было подробно рассмотрено отображение таблицы данных из базы данных SQL . Но в связи с вопросом от одного из читателей, делаю небольшое дополнение к это примеру.

Вопрос состоял в том, как закрасить всю строку в зависимости от значения в одной из колонок. В примере по работе с QSqlTableModel производилось добавление в базу данных строк с датой, временем, псевдослучайным числом и сообщением об этом псевдослучайном числе. В связи с этим в качестве подопытных строк были выбраны строки, где псевдослучайное число равняется 41.

Для этого необходимо наследоваться от класса QSqlTableModel и переопределить метод QSqlTableModel::data(). После чего использовать в качестве модели данных новый класс наследник.

QML - Урок 011. Передача данных из QSqlQueryModel в Qml TableView

TutorialQMLQML, SQL, Qt, DataBase, QSqlQueryModel, TableView207

Для представления таблиц баз данных в TableView при разработке с использованием QML можно использовать класс, наследованный от QSqlQueryModel. Для этого необходимо в наследованном классе определить метод, который установит соответствие ролей колонок таблицы к соответствующим колонкам в TableView, определенном в QML, где также указаны роли для каждого объекта TableViewColumn, то есть для каждой колонки. Также необходимо будет переопределить метод QVariant data( ... ) const , который возвращает данные для ячеек таблицы. В данном случае информация будет возвращаться в соответствии с определёнными ролями колонок таблицы.

Структура проекта для работы с TableView

Проект состоит из следующих файлов:

  • QmlSqlQueryModel.pro - профайл проекта;
  • database.h - заголовочный для создания и инициализации тестовой базы данных;
  • database.cpp - файл исходных кодов для создания и инициализации тестовой базы данных;
  • model.h - заголовочный файл модели данных;
  • model.cpp - файл исходных кодов модели данных;
  • main.cpp - основной исходный файл проекта;
  • main.qml - qml файл с TableView.

Реклама

Реклама