728x90

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 주소로 들어갑니다.

 

MySQL :: Download MySQL Community Server

Select Version: 5.7.29 5.6.47 Select Operating System: Select Operating System… Microsoft Windows Debian Linux Ubuntu Linux SUSE Linux Enterprise Server Red Hat Enterprise Linux / Oracle Linux Fedora Linux - Generic Oracle Solaris macOS Source Code Select

dev.mysql.com

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를 가로폭에 딱 맞게 설정

위 코드를 넣어주면 아래 사진처럼 가로폭이 딱 맞게 설정이 됩니다.

728x90

'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

+ Recent posts