Qt 프로젝트를 만들었다면 먼저 아래 코드를 넣고 실행을 해봅니다.
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
qDebug() << "드라이버" << QSqlDatabase::drivers();
}
실행결과에 사용 가능한 드라이버가 출력이 되는데 드라이버에 QMYSQL이 있어야 MySQL이나 MariaDB를 사용할 수 있습니다.
드라이버 ("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
MYSQL 드라이버가 있다면 .pro파일에 sql을 추가해줍니다.
QT += core gui sql
그리고 헤더파일과 cpp파일에 아래처럼 코드를 추가해 줍니다.
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtSql>
#include <QSqlDatabase>
#include <QDebug>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
QSqlDatabase db;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
qDebug() << "드라이버" << QSqlDatabase::drivers();
qDebug() << QCoreApplication::libraryPaths();
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1"); // IP 또는 DNS Host name
db.setPort(3306);
db.setDatabaseName("tree_management_system"); // DB명
db.setUserName("root"); // 계정 명
db.setPassword("12345678"); // 계정 Password
db.open();
}
MainWindow::~MainWindow()
{
delete ui;
}
이 코드로 실행을 하면 실행결과에 아래의 문구를 확인할 수 있습니다.
QSqlDatabase: QMYSQL driver not loaded
이 문제를 해결하기 위해서 https://dev.mysql.com/downloads/mysql/5.7.html#downloads 주소로 들어갑니다.
qt 컴파일러의 비트에 맞는 버전으로 다운받아 줍니다.(MinGW 32bit -> x86,32bit)
로그인을 하라고 나오면 그냥 맨 아래의 No thanks를 눌러줍니다.
압축을 풀고 lib폴더 안의 libmysql.dll과 libmysqlid.dll을 복사하여 프로젝트의 build폴더에 붙여넣어 줍니다.
build폴더는 librayPath()를 실행했을 때 나오는 출력에서 확인할 수 있습니다.
아래와 같이 두 파일을 넣어주고 다시 프로젝트를 실행하면 QMYSQL driver not loaded 문구가 안뜨는 것을 확인할 수 있습니다.
이제 데이터베이스에서 데이터를 불러와서 출력해보겠습니다.
ui는 간단하게 Tableview, pushbutton으로 이루어져 있습니다.
mainwindow의 헤더파일과 cpp파일입니다.
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtSql>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlTableModel>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QSqlDatabase db;
QSqlTableModel *model;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
qDebug() << "드라이버" << QSqlDatabase::drivers();
qDebug() << QCoreApplication::libraryPaths();
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1"); // IP 또는 DNS Host name
db.setPort(3306);
db.setDatabaseName("tree"); // DB명
db.setUserName("root"); // 계정 명
db.setPassword("12345678"); // 계정 Password
db.open();
model = new QSqlTableModel(this);
model->setTable("Tree"); // 테이블명
ui->tableView->setModel(model);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
model->select();
}
실행을 하면 테이블의 속성들만 가져와 있는 상태입니다.
여기서 검색버튼을 누르면 테이블에 저장되어 있는 정보들을 불러와서 보여주게 됩니다.
여기에 delete와 insert 기능도 추가해 보겠습니다.
기존의 ui에 tabwideget을 이용해서 조회 및 삭제 탭과 등록 탭으로 나뉘어 구성했습니다.
등록 탭에서 이름을 기입하고 등록 버튼을 누르면 테이블에 insert하는 코드입니다.
void MainWindow::on_insertButton_clicked()
{
QString name = ui->nameEdit->text();
QString category = ui->categoryEdit->text();
QSqlQuery qry;
qry.prepare(QString("insert into Tree(Name, Category) values('%1','%2')")
.arg(name).arg(category));
if( !qry.exec() )
qDebug() << qry.lastError();
}// 등록 탭에서 등록 버튼 누를 시 입력된 값을 insert
이름과 카테고리에 기입 후 등록을 누르면 조회 및 삭제 탭에서 조회 버튼을 누르면 정보가 기입된 것을 확인할 수 있습니다.
마지막으로 삭제하고 싶은 행을 클릭 후 삭제를 누르고 조회를 누르면 데이터가 삭제된 것을 확인할 수 있습니다.
마지막으로 tableview를 프로그램에 크기에 맞게 설정하는 방법입니다.
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
// tableview를 가로폭에 딱 맞게 설정
위 코드를 넣어주면 아래 사진처럼 가로폭이 딱 맞게 설정이 됩니다.
'Programming > Qt' 카테고리의 다른 글
Qt 커스텀 위젯 사용하기 (0) | 2020.04.10 |
---|---|
Qt 클릭 이벤트 만들기 (0) | 2020.04.10 |
Qt Tcp 소켓통신하기(서버) (0) | 2019.11.20 |
Qt QLabel에 사진 넣기 (0) | 2019.11.07 |
Qt QThread 사용하기(화면 실시간 갱신하기) (0) | 2019.10.30 |