- •1. Библиотека qt. Обзор.
- •2. Библиотека qt. Компоненты библиотеки qt.
- •3. Библиотека qt. Простое приложение на qt.
- •4. Библиотека qt. Слоты и сигналы.
- •5. Библиотека qt. Компоновка виджетов.
- •6. Библиотека qt. Управление компоновкой. Абсолютное позиционирование.
- •7. Библиотека qt. Управление компоновкой. Собственный алгоритм.
- •10. Библиотека qt. Управление компоновкой. Разделители.
- •8. Библиотека qt. Управление компоновкой. Менеджеры компоновки.
- •9. Библиотека qt. Управление компоновкой. Стековая компоновка.
- •11. Библиотека qt. Обработка событий.
- •12. Библиотека qt. Фильтры событий.
- •13. Библиотека qt. Обработка событий во время продолжительных процессов.
- •14. Библиотека qt. Работа с бд. Драйверы бд.
- •15. Библиотека qt. Работа с бд. Выполнение запросов к бд (qSqlQuery).
- •16. Библиотека qt. Работа с бд. Модели для работы с бд (qSqlTableModel).
- •17. Библиотека qt. Работа с бд. Связь модели qSqlTableModel с виджетом qTableView.
- •18. Графический интерфейс пользователя. Общие понятия, виды интерфейсов.
- •19. Графический интерфейс пользователя. Классификация интерфейсов.
- •20. Графический интерфейс пользователя. Командный интерфейс.
- •21. Графический интерфейс пользователя. Wimp(оому) интерфейс.
- •22. Графический интерфейс пользователя. Silk(рояз) интерфейс.
- •23. Графический интерфейс пользователя. Эргономика.
- •24. Графический интерфейс пользователя. Когнетика и локус внимания.
- •25. Графический интерфейс пользователя. Кратковременная память пользователя.
- •26. Графический интерфейс пользователя. Долговременная память пользователя.
- •27. Графический интерфейс пользователя. Формирование привычек.
- •28. Графический интерфейс пользователя. Одновременное выполнение задач.
- •29. Критерии качества графического интерфейса пользователя. Скорость выполнения работы.
- •30. Критерии качества графического интерфейса пользователя. Непосредственное манипулирование.
- •31. Критерии качества графического интерфейса пользователя. Потеря фокуса внимания.
- •32. Критерии качества графического интерфейса пользователя. Длительность физических действий.
- •33. Критерии качества графического интерфейса пользователя. Кнопка бесконечного размера.
- •34. Критерии качества графического интерфейса пользователя. Нулевая дистанция до кнопки.
- •36. Критерии качества графического интерфейса пользователя. Количественный анализ интерфейса(goms).
- •37. Критерии качества графического интерфейса пользователя. Человеческие ошибки.
- •38. Критерии качества графического интерфейса пользователя. Природа человеческих ошибок.
- •39. Критерии качества графического интерфейса пользователя. Типы человеческих ошибок.
- •40. Критерии качества графического интерфейса пользователя. Предотвращение человеческих ошибок.
- •41. Критерии качества графического интерфейса пользователя. Блокировка опасных действий пользователя.
- •42. Критерии качества графического интерфейса пользователя. Проверка системой действий пользователя перед их исполнением.
- •43. Критерии качества графического интерфейса пользователя. Самостоятельный выбор команд и параметров системой.
- •44. Критерии качества графического интерфейса пользователя. Обучение работе с системой.
- •45. Критерии качества графического интерфейса пользователя. Ментальная модель системы.
- •46. Критерии качества графического интерфейса пользователя. Аффорданс, метафора.
- •47. Критерии качества графического интерфейса пользователя. Обучающие материалы.
- •48. Критерии качества графического интерфейса пользователя. Субъективное удовлетворение.
- •49. Критерии качества графического интерфейса пользователя. Эстетика и красота в интерфейсе.
- •50. Критерии качества графического интерфейса пользователя. Субъективность восприятия времени.
- •51. Критерии качества гип. Сообщения об ошибках.
- •52. Гип. Модели графического интерфейса пользователя.
- •53. Проектирование гип. Обзор основных этапов разработки.
- •54. Проектирование гип. Определение необходимой функциональности системы.
- •55. Проектирование гип. Создание пользовательских сценариев.
- •56. Проектирование гип. Проектирование общей структуры.
- •57. Проектирование гип. Конструирование отдельных блоков.
- •58. Проектирование гип. Создание глоссария.
- •59. Проектирование гип. Сборка и начальная проверка полной схемы системы.
- •60. Проектирование гип. Построение прототипа.
- •61. Проектирование гип. Тестирование и модификация прототипа.
14. Библиотека qt. Работа с бд. Драйверы бд.
Модуль QtSQL позвоялет обеспечить независимый от платформы и типа БД интерфейс для доступа к БД при помощи языка SQL. Связь с БД обеспечивается объектом QSqlDatabase. Для соединения с БД применяются специальные драйверы.
Qt позволяет использовать следующие драйверы:
QDB2 — IBM DB2 7.1 и выше
QIBASE — InterBase
QMYSQL — MySql
QOCI — Oracle
QODBC — MsSql (ODBC)
QPSQL — PostgreSQL 3 и выше.
QSQLITE — SQLite 3
QSQLITE2 — SQLite 2
QTDS — Sybase Adaptive Server
Из-за лецинзионных ограничений в поставку Qt с исходным кодом входит только драйвер SQLite. Qt предоставляет 2 варианта работы с БД:
Использование класса QSqlQueery — позволяет выполнять произвольные команды SQL.
QSqlTableModel and QSqlRelationTableModel, реализующих высокоуровневый интерфейс для работы с БД.
Соединение с БД
bool createConnection()
{
QSqlData *db=QSqlDatabase::addDatabase(«QSQLITE»,»Other»);
db->setDatabaseName(«my.sqlyte»);
if(!dp->open())
{
db->lastError().showMessage();
return false;
}
return true;
}
15. Библиотека qt. Работа с бд. Выполнение запросов к бд (qSqlQuery).
После установления соединения, посредством QSqlQuery, можно выполнять SQL-запросы к базе данных. Например, следующий код выполняет SQL-предложение -- SELECT:
QSqlQuery query;
query.exec("SELECT title, year FROM cd WHERE year >= 1998");
После вызова функции exec(), можно просматривать полученный набор данных:
while (query.next()) {
QString title = query.value(0).toString(); int year = query.value(1).toInt();
cerr << title.ascii() << ": " << year << endl; }
Первый вызов next() позиционирует QSqlQuery на первую запись в наборе данных. Последующие вызовы next() передвигают указатель на следующую запись и так до тех пор, пока не будет достигнут конец набора. В этой точке next() вернет false.
Функция value() возвращает значение поля в виде QVariant. Поля нумеруются, начиная с 0, в порядке их следования в предложении SELECT. Класс QVariant может хранить огромное количество типов языка C++ и Qt, в том числе int и QString. Различные типы данных, которые могут храниться в базе данных переводятся в соответствующие типы C++ и Qt, и сохраняются в виде QVariant. Например, VARCHAR представляется в виде QString, а DATETIME -- как QDateTime.
Класс QSqlQuery предоставляет целый набор функций для навигации по набору данных: first(), last(), prev(), seek() и at(). Они очень удобны в использовании, но на некоторых базах данных могут оказаться довольно медлительными и ресурсоемкими. С целью оптимизациии, при работе с большими наборами данных, можно вызвать QSqlQuery::setForwardOnly(true), перед exec(), а затем выполнять просмотр набора данных с помощью next(), правда в этом случае мы получаем, так называемые, однонаправленные наборы данных, т.е. такие наборы, навигация по которым может осуществляться только вперед, с помощью next().Чуть выше говорилось о том, что SQL-запрос передается как аргумент функции exec(), но текст запроса может передаваться напрямую, конструктору QSqlQuery:
QSqlQuery query("SELECT title, year FROM cd WHERE year >= 1998");
Проверка на наличие ошибок и выдача сообщения могут быть выполнены таким образом:
if (!query.isActive())
query.lastError().showMessage();
Выполнение предложения INSERT ничуть не сложнее, чем SELECT:
QSqlQuery query("INSERT INTO cd (id, artistid, title, year) "
"VALUES (203, 102, 'Living in America', 2002)");
После выполнения такого запроса, QSqlQuery::numRowsAffected() возвращает количество записей, подвергшихся изменению (или -1, если база данных не предусматривает поставку такой информации).
В случае необходимости вставить в запрос значения переменных или когда нежелательно, или невозможно перевести аргументы предложения INSERT в строковый вид, можно построить параметризованный запрос, с помощью функции prepare(). Текст параметризованного запроса, вместо реальных значений содержит параметры, которые заполняются фактическими значениями после создания запроса. Qt поддерживает Oracle-подобный и ODBC-подобный стили именования параметров для всех типов баз данных. Использование Oracle-подобного стиля именования:
QSqlQuery query(db);
query.prepare("INSERT INTO cd (id, artistid, title, year) "
"VALUES (:id, :artistid, :title, :year)");
query.bindValue(":id", 203);
query.bindValue(":artistid", 102);
query.bindValue(":title", QString("Living in America"));
query.bindValue(":year", 2002);
query.exec();
