2. Разработка приложения на Qt
В данной лабораторной работе рассматривается пример создания простейшего приложения в среде QtCreator, работающего с БД.
2.1. Структура БД
Для разработки приложения необходимо создать БД следующей структуры:
2.2. Создание проекта и интерфейса
Создаем новый проект
В качестве шаблона выбираем “Приложение/Приложение Qt Widgets”
Далее выбираем все опции по умолчанию, указав имя проекта и его расположение.
В дереве объектов дважды кликаем по форме (mainwindow.ui
) и приступаем к размещению элементов на форме. Для этого используются Push Button
, меню и QTreeView
.
В меню создаем ряд пунктов для открытия, закрытия БД, выхода и показа справки.
Остальные компоненты размещаем как на рисунке.
2.3. Написание кода
Перед написанием добавим в файл проекта .pro
модуль sql
QT += core gui sql
Обработчик нажатия пунктов меню пишется следующим образом:
Выделяем нужный пункт меню на форме.
Внизу также будет список пунктов. На нужном кликаем правой кнопкой мыши и выбираем “Переход к слоту”. Далее выбираем “triggered“.
Открывается редактор кода, в котором мы увидим заготовку метода, который будет вызван при нажатии на пункт меню.
Добавляем код соединения с БД, т.е. обработчик пункта меню “Файл/Открыть”
// Connection is already open
if (abonentModel) // Field of MainWindow
return;
QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE", "phones");
db.setHostName("localhost");
db.setDatabaseName(QFileDialog::getOpenFileName(this, "Open Database", "/var/rdb", "Database files (*.fdb);;All files (*)"));
const bool ok = db.open("SYSDBA", "masterkey");
if (!ok)
{
ShowMessage("Ошибка подключения");
return;
}
abonentModel = new QSqlTableModel(this, db);
abonentModel->setTable("ABONENT");
abonentModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
abonentModel->select();
ui->abonentView->setModel(abonentModel);
Код для закрытия БД
delete abonentModel;
abonentModel = nullptr;
QSqlDatabase::database("phones").close();
Можно протестировать. БД должна открываться и данные должны появлятся в таблице. Функции ShowMessage нужна для вывода сообщений на экран. Она определяется следующим образом.
void ShowMessage(const QString text)
{
QMessageBox msg;
msg.setText(text);
msg.exec();
}
Для написания обработчика нажания кнопки кликните на ней на форме правой кнопкой мыши и в “Перейти к слоту” выберете whenClicked
.
Ниже все обработчики кнопок. Говорящие названия обработчиков описывают действия.
void MainWindow::on_btnAdd_clicked()
{
if (!abonentModel->insertRow(0))
ShowMessage(abonentModel->lastError().text());
}
void MainWindow::on_btnSave_clicked()
{
if (!abonentModel->submitAll())
ShowMessage(abonentModel->lastError().text());
}
void MainWindow::on_btnDel_clicked()
{
QModelIndex i = ui->abonentView->selectionModel()->currentIndex();
if (!abonentModel->removeRow(i.row()))
ShowMessage(abonentModel->lastError().text());
}
void MainWindow::on_btnCancel_clicked()
{
abonentModel->revertAll();
}
void MainWindow::on_btnRefresh_clicked()
{
abonentModel->select();
}
Важно
На этом разработка первого приложения завершена. Необходимо его тщательно протестировать.