Концепция Интервью в Qt

Концепция Интервью в Qt

Модуль QtSql поддерживает концепцию Интервью, предоставляя целый ряд моделей для использования их в представлениях. Класс QSqlTableModel позволяет, например, отображать данные в табличной и иерархической форме.

Использование Интервью — это самый простой способ отобразить данные таблицы. Здесь не потребуется цикла для прохождения по строкам таблицы.

Программа, окно которой отображено на рисунке, демонстрирует такую возможность.

{рисунок}

int main(int argc, char** argv)
{
    QApplication app(argc, argv);

   if (!createConnection()) 
   {
     return -1;
   }

  QTableView view;
  QSqlTableModel model;

  model.setTable("addressbook");
  model.select();
  model.setEditStrategy(QSqlTableModel::OnFieldChange);

  view.setModel(&model);
  view.show();

  return app.exec();
}

После соединения с базой данных, проводимого с помощью функции createConnection(), создается объект табличного представления QTableView и объект табличной модели QSqlTableModel. Вызовом метода setTable() мы устанавливаем актуальную базу в модели. Вызов метода select() производит заполнение данными.

Теперь настало время немного рассказать о возможностях редактирования и записи данных. Класс QSqlTableModel предоставляет для этого три следующие стратегии редактирования, которые устанавливаются с помощью метода setEditStrategy():

onRowChange — производит запись данных, как только пользователь перейдет к другой строке таблицы;
onFieldChange — производит запись данных после того, как пользователь перейдет к другой ячейке таблицы;
OnManualSubmit —записывает данные по вызову слота submitAl(). Если вызывается слот revertAll(), то данные возвращаются в исходное состояние.

Какая из стратегий вам больше подходит, должны выбрать вы сами. В примере мы используем, вызовом метода setEditStrategy(), стратегию QSqlTableModel::OnFieldChange. Теперь данные нашей модели можно изменять после двойного щелчка на ячейке. В завершение мы устанавливаем модель в представлении вызовом метода setModel().

Если вам понадобится произвести отображение данных какого-либо конкретного опроса SELECT, то для этого целесообразнее будет воспользоваться другим классом SQL-моделей — классом QSqlQueryModel. Листинг ниже иллюстрирует отображение только электронных адресов и телефонных номеров всех контактов с именем Piggy. В нашем случае он будет всего лишь один.

int main(int argc, char** argv)
{
  QApplication app(argc, argv);

  if (!createConnection())
  {
   return -1;
  }

QTableView view;
QSqlQueryModel model;
model.setQuery("SELECT phone, email " "FROM addressbook " "WHERE name = 'Piggy';");

if (model.lastError().isValid()) 
{
 qDebug() << model.lastError();
}

view.setModel(&model);
view.show();

return app.exec();
}

Здесь мы создаем табличное представление QTableView и модель опроса QSqlQueryModel. Строка запроса передается в метод setQuery(), после чего результат выполнения запроса проверяется в операторе if на наличие проблем исполнения, с помощью метода lastError(). Неверный объект класса QSqlError, возвращаемый этим методом, означает, что ошибок нет и никаких проблем не произошло. Это проверяется методом isValid(). Возникновение проблем повлечет их отображение в qDebug(). В завершение, модель устанавливается в представлении вызовом метода setModel().

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *