728x90
CRUD (Create, Read, Update, Delete) 작업을 수행하는 GUI 애플리케이션을 Qt로 개발하는 것은 데이터베이스와 상호작용하는 애플리케이션을 만드는 데 유용합니다. 아래는 Qt와 MariaDB를 사용하여 CRUD 작업을 수행하는 간단한 예제입니다. 이 예제는 데이터베이스와의 기본적인 상호작용을 위한 간단한 GUI를 제공합니다.
예제 개요
- 데이터베이스: MariaDB
- 프레임워크: Qt
- 기능:
- Create: 새로운 데이터 항목 추가
- Read: 데이터베이스에서 데이터 읽기
- Update: 기존 데이터 수정
- Delete: 데이터 삭제
1. 데이터베이스 설정
MariaDB에 testdb
데이터베이스와 test_table
테이블을 생성합니다.
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE test_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
age INT
);
INSERT INTO test_table (name, age) VALUES ('Alice', 30), ('Bob', 25);
2. Qt 프로젝트 설정
CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(QtCrudExample)
find_package(Qt5 REQUIRED COMPONENTS Core Widgets SQL)
add_executable(QtCrudExample main.cpp)
target_link_libraries(QtCrudExample Qt5::Core Qt5::Widgets Qt5::SQL)
qmake 프로젝트 파일 (QtCreator 사용 시)
QT += core gui sql widgets
TARGET = QtCrudExample
TEMPLATE = app
SOURCES += main.cpp mainwindow.cpp
HEADERS += mainwindow.h
3. Qt 애플리케이션 코드
main.cpp
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow window;
window.show();
return app.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSqlDatabase>
#include <QSqlTableModel>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_addButton_clicked();
void on_updateButton_clicked();
void on_deleteButton_clicked();
private:
void setupDatabase();
void setupModel();
Ui::MainWindow *ui;
QSqlDatabase db;
QSqlTableModel *model;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setupDatabase();
setupModel();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::setupDatabase()
{
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("testdb");
db.setUserName("username"); // MariaDB 사용자 이름
db.setPassword("password"); // MariaDB 비밀번호
if (!db.open()) {
qDebug() << "Database connection failed:" << db.lastError().text();
} else {
qDebug() << "Database connected!";
}
}
void MainWindow::setupModel()
{
model = new QSqlTableModel(this, db);
model->setTable("test_table");
model->select();
ui->tableView->setModel(model);
}
void MainWindow::on_addButton_clicked()
{
QSqlQuery query;
query.prepare("INSERT INTO test_table (name, age) VALUES (:name, :age)");
query.bindValue(":name", ui->nameLineEdit->text());
query.bindValue(":age", ui->ageSpinBox->value());
if (!query.exec()) {
qDebug() << "Add failed:" << query.lastError().text();
} else {
model->select();
}
}
void MainWindow::on_updateButton_clicked()
{
QModelIndexList selection = ui->tableView->selectionModel()->selectedRows();
if (selection.isEmpty()) {
return;
}
int row = selection.first().row();
QSqlQuery query;
query.prepare("UPDATE test_table SET name = :name, age = :age WHERE id = :id");
query.bindValue(":name", ui->nameLineEdit->text());
query.bindValue(":age", ui->ageSpinBox->value());
query.bindValue(":id", model->data(model->index(row, 0)).toInt());
if (!query.exec()) {
qDebug() << "Update failed:" << query.lastError().text();
} else {
model->select();
}
}
void MainWindow::on_deleteButton_clicked()
{
QModelIndexList selection = ui->tableView->selectionModel()->selectedRows();
if (selection.isEmpty()) {
return;
}
int row = selection.first().row();
QSqlQuery query;
query.prepare("DELETE FROM test_table WHERE id = :id");
query.bindValue(":id", model->data(model->index(row, 0)).toInt());
if (!query.exec()) {
qDebug() << "Delete failed:" << query.lastError().text();
} else {
model->select();
}
}
mainwindow.ui (Qt Designer에서 디자인)
- QTableView: 데이터베이스의 내용을 표시할 테이블 뷰.
- QLineEdit (nameLineEdit): 이름을 입력할 텍스트 필드.
- QSpinBox (ageSpinBox): 나이를 입력할 스핀 박스.
- QPushButton (addButton): 새로운 데이터를 추가하는 버튼.
- QPushButton (updateButton): 선택된 데이터를 업데이트하는 버튼.
- QPushButton (deleteButton): 선택된 데이터를 삭제하는 버튼.
4. 빌드 및 실행
- 빌드:
CMake
또는qmake
를 사용하여 프로젝트를 빌드합니다. - 실행: 애플리케이션을 실행하고 GUI를 통해 데이터베이스의 데이터를 조작합니다.
요약
위의 예제는 Qt를 사용하여 MariaDB 데이터베이스와 상호작용하는 간단한 CRUD 애플리케이션을 만드는 방법을 보여줍니다. 이 애플리케이션은 사용자가 데이터베이스에 새 데이터를 추가하고, 기존 데이터를 수정하고, 삭제할 수 있는 기능을 제공합니다. Qt의 QSqlTableModel
과 QSqlQuery
클래스를 사용하여 데이터베이스와 상호작용하며, 데이터베이스의 변화를 실시간으로 반영할 수 있습니다.
728x90
반응형
'Software > C' 카테고리의 다른 글
C 시작하기 - OpenCV 활용 (0) | 2024.08.06 |
---|---|
C 시작하기 - OpenCV 소개 (0) | 2024.08.06 |
C 시작하기 - QT (0) | 2024.08.04 |
C언어 문법 (0) | 2024.07.29 |
C언어 소개 (0) | 2024.07.29 |