#include "dialoglogin.h" #include "ui_dialoglogin.h" #include "mainwindow.h" #include DialogLogin::DialogLogin(QWidget *parent) : QDialog(parent), ui(new Ui::DialogLogin) { setAttribute(Qt::WA_TranslucentBackground); setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog | Qt::Popup); ui->setupUi(this); setGeometry(0, 0, 1280, 1024); ui->lineEdit_Password->setEchoMode(QLineEdit::Password); ui->lineEdit_ID->setFocus(); connect(ui->lineEdit_ID, SIGNAL(returnPressed()), this, SLOT(OnReturnPressed())); connect(ui->lineEdit_Password, SIGNAL(returnPressed()), this, SLOT(OnReturnPressed())); } DialogLogin::~DialogLogin() { disconnect(ui->lineEdit_ID, SIGNAL(returnPressed()), this, SLOT(OnReturnPressed())); disconnect(ui->lineEdit_Password, SIGNAL(returnPressed()), this, SLOT(OnReturnPressed())); delete ui; } void DialogLogin::OnReturnPressed() { ui->pushButton_OK->click(); } void DialogLogin::resizeEvent(QResizeEvent *event) { int nDisplayType = MainWindow::GetCommonData()->GetDisplayType(); if(nDisplayType==SDISPLAY_1280X1024) { ui->frame->setGeometry((1280-600)/2, (1080-340)/2, 600, 340); //ui->label->setGeometry(0, 30, 1080, 80); //ui->pushButton->setGeometry(1080/2-250/2, 124, 250, 60); } else if(nDisplayType==SDISPLAY_1920X1080) { //ui->frame_info->setGeometry(100, 400, 1720, 200); //ui->label->setGeometry(0, 30, 1720, 80); //ui->pushButton->setGeometry(728, 124, 271, 61); } } void DialogLogin::on_pushButton_OK_clicked() { QString strID = ui->lineEdit_ID->text(); QString strPassword = ui->lineEdit_Password->text(); bool bLoginSuccess = false; // 1. 이 로그인 확인 작업을 위한 지역 DB 인스턴스를 생성합니다. SUTIL::SDatabase db(QString("LoginCheck_%1").arg(reinterpret_cast(this))); if (db.OpenDatabase("/home/birdhead/test.db") == 0) // 0이 성공 { // 2. 보안과 효율을 위해 COUNT(*) 쿼리와 '?' 플레이스홀더를 사용합니다. QString query = "SELECT COUNT(*) FROM LoginUser WHERE LoginID = ? AND LoginPassword = ?;"; // 3. 사용자 입력을 안전하게 파라미터로 전달합니다. QVariantList params; params << strID << strPassword; // 4. executeScalar 헬퍼를 사용해 일치하는 사용자의 '수'를 가져옵니다. // 이 수가 0보다 크면, 로그인 정보가 일치하는 것입니다. if (db.executeScalar(query, params).toInt() > 0) { bLoginSuccess = true; } } else { qWarning() << "DB open failed for login check."; // 필요에 따라 사용자에게 DB 오류 메시지 표시 } // 5. 최종 결과에 따라 다이얼로그를 닫습니다. if (bLoginSuccess) { done(QDialog::Accepted); } else { // 로그인 실패 시 사용자에게 알림 (예: QMessageBox) QMessageBox::warning(this, "Login Failed", "Invalid ID or password."); // 기존 코드처럼 실패 시 아무것도 안 하려면 이 else 블록을 비워두거나 제거합니다. } /* QString strID; QString strPassword; strID = ui->lineEdit_ID->text(); strPassword = ui->lineEdit_Password->text(); QString strQuery; strQuery = QString("select * from LoginUser where LoginID='%1' and LoginPassword='%2';").arg(strID).arg(strPassword); CommonData* pCommonData = MainWindow::GetCommonData(); SDatabase* pDatabase = pCommonData->GetDatabase(); pDatabase->ExecuteQuery(strQuery); QList* pResult = pDatabase->GetResult(); if(pResult->size()>0) { pCommonData->ReleaseDatabase(); done(QDialog::Accepted); } else { pCommonData->ReleaseDatabase(); } */ } void DialogLogin::reject() { }