Qt C++ GUI เขียนโค้ดครั้งเดียว Cross-Platform + ตัวอย่างพร้อมใช้งาน

ในห้อง 'คอมพิวเตอร์ & อินเตอร์เน็ต' ตั้งกระทู้โดย ledphong, 30 เมษายน 2015.

  1. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    6.เขียนคำสั่งควบคุมทั้งระบบ MyPhone.pro
     

    ไฟล์ที่แนบมา:

    • 82.png
      82.png
      ขนาดไฟล์:
      102.1 KB
      เปิดดู:
      179
  2. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    7.การเขียนคำสั่งจะบอกส่วนหัวก่อน (Headers) แล้วมาทำคำสั่งใน Sources

    adddialog.h
    =============================
     

    ไฟล์ที่แนบมา:

    • 83.png
      83.png
      ขนาดไฟล์:
      124.4 KB
      เปิดดู:
      134
    แก้ไขครั้งล่าสุดโดยผู้ดูแล: 7 พฤษภาคม 2015
  3. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    8.มาที่ Sources ของ adddialog.cpp เมื่อต้องการกดปุ่ม GenID
    ==================================
    แล้วแสดงค่า ใน txCodePK และ txtCodeID

    กลับมาที่ Sources ชื่อไฟล์ adddialog.cpp
    ==================================
     

    ไฟล์ที่แนบมา:

    • 84.png
      84.png
      ขนาดไฟล์:
      99.5 KB
      เปิดดู:
      125
    • 85.png
      85.png
      ขนาดไฟล์:
      99.8 KB
      เปิดดู:
      119
    • 86.png
      86.png
      ขนาดไฟล์:
      166.9 KB
      เปิดดู:
      134
    • 87.png
      87.png
      ขนาดไฟล์:
      163.1 KB
      เปิดดู:
      108
    • 88.png
      88.png
      ขนาดไฟล์:
      136.6 KB
      เปิดดู:
      102
    • 89.png
      89.png
      ขนาดไฟล์:
      136.9 KB
      เปิดดู:
      111
    • 90.png
      90.png
      ขนาดไฟล์:
      135.6 KB
      เปิดดู:
      103
    • 91.png
      91.png
      ขนาดไฟล์:
      127.7 KB
      เปิดดู:
      120
    • 92.png
      92.png
      ขนาดไฟล์:
      49.9 KB
      เปิดดู:
      136
    แก้ไขครั้งล่าสุดโดยผู้ดูแล: 8 พฤษภาคม 2015
  4. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    9.Build Project และ Run ดู

    แก้ไขรูปที่ 95
    วางไฟล์ libmysql.dll ที่ห้อง D:\Test\build-MyPhone-Desktop_Qt_5_4_1_MinGW_32bit-Debug ครับผม
     

    ไฟล์ที่แนบมา:

    • 93.png
      93.png
      ขนาดไฟล์:
      147.9 KB
      เปิดดู:
      103
    • 94.png
      94.png
      ขนาดไฟล์:
      75.1 KB
      เปิดดู:
      114
    • 95.png
      95.png
      ขนาดไฟล์:
      72.8 KB
      เปิดดู:
      90
    • 96.png
      96.png
      ขนาดไฟล์:
      51.9 KB
      เปิดดู:
      85
    แก้ไขครั้งล่าสุดโดยผู้ดูแล: 9 พฤษภาคม 2015
  5. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    10.ปัญหาโปรแกรมเมอร์ มือใหม่หัดขับ ที่ควรระมัดระวัง คือ การใช้ select max(...) from tbl...
     

    ไฟล์ที่แนบมา:

    • 97.png
      97.png
      ขนาดไฟล์:
      132.4 KB
      เปิดดู:
      87
    • 98.png
      98.png
      ขนาดไฟล์:
      54.5 KB
      เปิดดู:
      108
    แก้ไขครั้งล่าสุดโดยผู้ดูแล: 8 พฤษภาคม 2015
  6. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    11.ปรับปรุง Code ของปุ่ม btnGenID ใหม่
     

    ไฟล์ที่แนบมา:

    • 99.png
      99.png
      ขนาดไฟล์:
      133.4 KB
      เปิดดู:
      86
    • 100.png
      100.png
      ขนาดไฟล์:
      47 KB
      เปิดดู:
      102
    • 101.png
      101.png
      ขนาดไฟล์:
      155.1 KB
      เปิดดู:
      102
    • 102.png
      102.png
      ขนาดไฟล์:
      135.5 KB
      เปิดดู:
      89
    แก้ไขครั้งล่าสุดโดยผู้ดูแล: 8 พฤษภาคม 2015
  7. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    12.ทำปุ่ม รีเฟรซข้อมูล หรือ btnRefresh
     

    ไฟล์ที่แนบมา:

    • 103.png
      103.png
      ขนาดไฟล์:
      47.3 KB
      เปิดดู:
      112
    • 104.png
      104.png
      ขนาดไฟล์:
      89.4 KB
      เปิดดู:
      99
    • 105.png
      105.png
      ขนาดไฟล์:
      169.3 KB
      เปิดดู:
      75
    • 106.png
      106.png
      ขนาดไฟล์:
      162.5 KB
      เปิดดู:
      76
    • 107.png
      107.png
      ขนาดไฟล์:
      144.2 KB
      เปิดดู:
      87
    แก้ไขครั้งล่าสุดโดยผู้ดูแล: 8 พฤษภาคม 2015
  8. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    13.ปรับปรุง btnRefresh ใหม่
     

    ไฟล์ที่แนบมา:

    • 108.png
      108.png
      ขนาดไฟล์:
      151.1 KB
      เปิดดู:
      81
  9. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    14.ปุ่ม เพิ่มข้อมูล หรือ btnAdd
    =================
    ก่อนคลิ๊กปุ่มเพิ่มข้อมูล ให้ตรวจสอบว่ามีการกดปุ่ม GenID หรือไม่ และตรวจสอบอีกว่ามี ชื่อ-สกุล หรือไม่ ส่วนเบอร์โทรศัพท์บางคนอาจจะไม่มีก็ได้


    สรุปตรวจสอบ ก่อนการกดปุ่มเพิ่มข้อมูล
    txtCodePK ต้องมีค่าไม่ว่าง
    txtCodeID ต้องมีค่าไม่ว่าง
    txtFullName ต้องมีค่าไม่ว่าง
     

    ไฟล์ที่แนบมา:

    • 109.png
      109.png
      ขนาดไฟล์:
      49.4 KB
      เปิดดู:
      88
    • 110.png
      110.png
      ขนาดไฟล์:
      171.8 KB
      เปิดดู:
      78
    • 111.png
      111.png
      ขนาดไฟล์:
      164.9 KB
      เปิดดู:
      72
    • 112.png
      112.png
      ขนาดไฟล์:
      142.7 KB
      เปิดดู:
      76
    • 113.png
      113.png
      ขนาดไฟล์:
      134.7 KB
      เปิดดู:
      89
    แก้ไขครั้งล่าสุดโดยผู้ดูแล: 8 พฤษภาคม 2015
  10. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    15.เพื่อให้ตัวอย่างได้สมบูรณ์มากที่สุด เพิ่มฐานข้อมูลอีก 2 ตัวแปร
    txtBirthDate วันเกิด
    txtSalary เงินเดือน
     

    ไฟล์ที่แนบมา:

    • 114.png
      114.png
      ขนาดไฟล์:
      98.7 KB
      เปิดดู:
      75
    • 115.png
      115.png
      ขนาดไฟล์:
      164.4 KB
      เปิดดู:
      101
    • 116.png
      116.png
      ขนาดไฟล์:
      138.9 KB
      เปิดดู:
      90
    • 117.png
      117.png
      ขนาดไฟล์:
      144.6 KB
      เปิดดู:
      74
    • 118.png
      118.png
      ขนาดไฟล์:
      152.5 KB
      เปิดดู:
      75
    • 119.png
      119.png
      ขนาดไฟล์:
      151.3 KB
      เปิดดู:
      87
    • 120.png
      120.png
      ขนาดไฟล์:
      135 KB
      เปิดดู:
      79
    • 121.png
      121.png
      ขนาดไฟล์:
      51 KB
      เปิดดู:
      79
    แก้ไขครั้งล่าสุดโดยผู้ดูแล: 9 พฤษภาคม 2015
  11. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    16.ต้องทำการค้นหาข้อมูลก่อนทำการ แก้ไขข้อมูล หรือ ลบข้อมูล
    =================================
    void AddDialog::eek:n_btnSearch_clicked()
    {
    if(ui->txtSearch->text()==""){
    QMessageBox::information(this,"แจ้งเตือน","กรุณาพิมพ์ค้นหาลำดับที่ก่อน");//แสดงข้อความแจ้งเตือน
    ui->txtSearch->setText("");
    return;//วนกลับไป กดปุ่ม txtSearch Box
    }
    connOpen();//ติดต่อ void connOpen() ใน Headers ของ adddialog.h
    if(!db.open()){//ถ้าเปิดฐานข้อมูล MariaDB ไม่ได้
    QMessageBox::critical(this,"Error Database Connection !",db.lastError().text());
    return;
    }else{
    try{
    QSqlQuery sql;//กำหนดตัวแปรประมวลผล
    sql.exec("Select * From tblphone Where CodePK Like '"+ui->txtSearch->text()+"'");//ค้นหาข้อมูลจากลำดับที่
    if(!sql.next() ){
    QMessageBox::information(this,"รายงานสถานะ","ไม่พบข้อมูลที่ต้องการค้นหา");
    ui->txtSearch->setText("");
    return;
    }else{
    do{
    int CodePK = sql.value(0).toInt();//กำหนดค่า CodePK เป็น Integer
    QString StrCodePK = QString("%1").arg(CodePK);//เก็บค่าไว้ที่ StrCodePK เช่น 1,2,3...
    ui->txtCodePK->setText(StrCodePK);//แสดงค่า เช่น 1,2,3... ที่ตัวแปร txtCodePK

    ui->txtCodeID->setText(sql.value(1).toString());//แสดงค่าที่ตัวแปร txtCodeID
    ui->txtFullName->setText(sql.value(2).toString());//แสดงค่าที่ตัวแปร txtFullName

    ui->txtBirthDate->QDateEdit::setDate(sql.value(3).toDate());//แสดงค่าที่ตัวแปร txtBirthDate

    double Salary = sql.value(4).toDouble();
    QString StrSalary = QString("%1").arg(Salary, 0, 'f', 2);//เก็บค่าไว้ที่ StrSalary แสดงจุดทศนิยม สองตำแหน่ง
    ui->txtSalary->setText(StrSalary);//แสดงค่า เช่น 1,2,3... ที่ตัวแปร txtSalary
    ui->txtTelephone->setText(sql.value(5).toString());

    //==========ปิดปุ่มและtextBox================
    ui->txtCodePK->setEnabled(false);
    ui->btnGenID->setEnabled(false);
    ui->btnAdd->setEnabled(false);
    ui->btnSearch->setEnabled(false);
    ui->txtSearch->setEnabled(false);
    //========================================
    } while (sql.next());
    }
    }catch(std::exception){
    QMessageBox::information(this, "รายงานสถานะ","ไม่สามารถแสดงข้อมูลได้!");
    }
    }
    connClose();//ปิดฐานข้อมูล
    }
     

    ไฟล์ที่แนบมา:

    • 122.png
      122.png
      ขนาดไฟล์:
      169.9 KB
      เปิดดู:
      73
    แก้ไขครั้งล่าสุดโดยผู้ดูแล: 10 พฤษภาคม 2015
  12. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    17.ปุ่มแก้ไขข้อมูล
    =======================================
    void AddDialog::eek:n_btnEdit_clicked()
    {
    if(ui->txtSearch->text()==""){
    QMessageBox::information(this,"แจ้งเตือน","กรุณาพิมพ์ค้นหาลำดับที่ก่อน");//แสดงข้อความแจ้งเตือน
    ui->txtSearch->setText("");
    return;//วนกลับไป กดปุ่ม txtSearch Box
    }
    //
    connOpen();//ติดต่อ void connOpen() ใน Headers ของ adddialog.h
    if(!db.open()){//ถ้าเปิดฐานข้อมูล MariaDB ไม่ได้
    QMessageBox::critical(this,"Error Database Connection !",db.lastError().text());
    return;
    }else{
    QSqlQuery sql;//กำหนดตัวแปรประมวลผล
    QString CodePK = ui->txtCodePK->text();//กำหนดตัวแปรเก็บค่า CodePK
    QString CodeID = ui->txtCodeID->text();//กำหนดตัวแปรเก็บค่า CodeID
    QString FullName = ui->txtFullName->text();//กำหนดตัวแปรเก็บค่า FullName

    QString BirthDate = ui->txtBirthDate->text();//รับค่าวันที่ เก็บไว้ใน QString
    QDate date = QDate::fromString(BirthDate, "yyyy-MM-dd");//แปลงวันที่จาก String ไปเป็น QDate

    double Salary = ui->txtSalary->text().toDouble();//กำหนดตัวแปรเก็บค่า เงินเดือน
    QString Telephone = ui->txtTelephone->text();//กำหนดตัวแปรเก็บค่า Telephone

    sql.prepare("UPDATE tblphone SET CodePK=:CodePK,"
    "CodeID=:CodeID,"
    "FullName=:FullName,"
    "BirthDate=:BirthDate,"
    "Salary=:Salary,"
    "Telephone=:Telephone Where CodePK Like '"+CodePK+"'");
    sql.bindValue(":CodePK",CodePK);
    sql.bindValue(":CodeID",CodeID);
    sql.bindValue(":FullName",FullName);
    sql.bindValue(":BirthDate",date);
    sql.bindValue(":Salary",Salary);
    sql.bindValue(":Telephone",Telephone);

    if(!sql.exec())
    QMessageBox::information(this,"Error Update Data !",db.lastError().text());
    else
    QMessageBox::information(this,"รายงานสถานะ","Update Data Successfull");//Update Data Successfull
    //==============Clear Data=======================
    ui->txtCodePK->setEnabled(true);
    ui->txtSearch->setEnabled(true);
    ui->btnGenID->setEnabled(true);
    ui->btnEdit->setEnabled(true);
    ui->btnDelete->setEnabled(true);
    ui->btnSearch->setEnabled(true);
    ui->txtCodePK->setText("");
    ui->txtCodeID->setText("");
    ui->txtFullName->setText("");
    ui->txtSalary->setText("0.00");
    ui->txtTelephone->setText("");
    ui->txtSearch->setText("");
    //===============================================
    }
    connClose();//ปิดฐานข้อมูล
    }
     
  13. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    18.ปุ่มลบข้อมูล
    ==================================
    void AddDialog::eek:n_btnDelete_clicked()
    {
    if(ui->txtSearch->text()==""){
    QMessageBox::information(this,"แจ้งเตือน","กรุณาพิมพ์ค้นหาลำดับที่ก่อน");//แสดงข้อความแจ้งเตือน
    ui->txtSearch->setText("");
    return;//วนกลับไป กดปุ่ม txtSearch Box
    }

    QMessageBox::StandardButton reply;
    reply = QMessageBox::question(this, "ยืนยันการลบ", "ท่านต้องการลบข้อมูลลำดับที่ :" + ui->txtSearch->text() + " จริงหรือไม่",
    QMessageBox::Yes|QMessageBox::No);
    if (reply == QMessageBox::Yes) {//กดปุ่ม Yes เพื่อทำการลบข้อมูล
    //ต้องการลบข้อมูลนี้
    connOpen();//ติดต่อ void connOpen() ใน Headers ของ adddialog.h
    if(!db.open()){//ถ้าเปิดฐานข้อมูล MariaDB ไม่ได้
    QMessageBox::critical(this,"Error Database Connection !",db.lastError().text());
    return;
    }else{
    QSqlQuery sql;//กำหนดตัวแปรประมวลผล
    QString CodePK = ui->txtSearch->text();//กำหนดตัวแปรเก็บค่า Search

    sql.prepare(" Delete From tblphone WHERE CodePK Like '"+CodePK+"'");
    sql.bindValue(":CodePK",CodePK);

    if(!sql.exec())
    QMessageBox::information(this,"Error Delete Data !",db.lastError().text());
    else
    QMessageBox::information(this,"รายงานสถานะ","Delete Data Successfull");//Delete Data Successfull
    //==============Clear Data=======================
    ui->txtCodePK->setEnabled(true);
    ui->txtSearch->setEnabled(true);
    ui->btnGenID->setEnabled(true);
    ui->btnEdit->setEnabled(true);
    ui->btnDelete->setEnabled(true);
    ui->btnSearch->setEnabled(true);
    ui->txtCodePK->setText("");
    ui->txtCodeID->setText("");
    ui->txtFullName->setText("");
    ui->txtSalary->setText("0.00");
    ui->txtTelephone->setText("");
    ui->txtSearch->setText("");
    //===============================================
    }
    connClose();//ปิดฐานข้อมูล
    } else {//กดปุ่ม No เพื่อไม่ต้องการลบข้อมูล
    return;//ไม่ต้องการลบข้อมูล กลับไปที่เดิม
    //QApplication::quit();
    }

    }
     
  14. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    19.ตรวจสอบโค้ด adddialog.cpp ทั้งหมด
    =============================
    #include "adddialog.h"
    #include "ui_adddialog.h"
    #include <QtSql/QSqlQuery> //ประมวลผล
    #include <QtSql/QSqlError> //เช็คว่ามี Error
    #include <QString> //กำหนดตัวแปรเป็น String
    #include <QMessageBox>//แสดงค่า Error
    #include <adddialog.h>//ดึง Headers ชื่อ adddialog.h เข้ามา เพื่อใช้ connOpen(); กับ connClose();
    #include <QDate>//ติดต่อ วัน เดือน ปี
    #include <QApplication>

    AddDialog::AddDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::AddDialog)
    {
    ui->setupUi(this);
    }

    AddDialog::~AddDialog()
    {
    delete ui;
    }

    void AddDialog::eek:n_btnGenID_clicked()
    {
    connOpen();//ติดต่อ void connOpen() ใน Headers ของ adddialog.h
    if(!db.open()){//ถ้าเปิดฐานข้อมูล MariaDB ไม่ได้
    QMessageBox::critical(this,"Error Database Connection !",db.lastError().text());
    return;
    }else{
    QSqlQuery sql;//กำหนดตัวแปรประมวลผล
    sql.exec("SELECT IFNULL(MAX(CodePK), 0)+1 AS MyMax FROM tblphone");//ประมวลผลหาค่าสูงสุด
    if(sql.next()){//ถ้าเดินหน้า
    QString MyMax = sql.value(0).toString();//เก็บค่าสูงสุดไว้ในตัวแปร MyMax
    if(MyMax == ""){//ถ้าค่า MyMax = ค่าว่าง
    ui->txtCodePK->setText("1");//แสดงผลเท่ากับ 1 ที่ตัวแปร txtCodePK
    ui->txtCodeID->setText("0000001");//แสดงค่า 0000001 ที่ตัวแปร txtCodeID
    }else{//ถ้าไม่ใช่ค่าว่าง
    ui->txtCodePK->setText(MyMax);//แสดงค่าสูงสุด ที่ตัวแปร txtCodePK
    int MyMax = sql.value(0).toInt();//กำหนดค่า MyMax เป็น Integer
    QString number = QString("%1").arg(MyMax,7,10,QChar('0'));//เก็บค่าไว้ที่ number เช่น 0000002,0000003,...
    ui->txtCodeID->setText(number);//แสดงค่า เช่น 0000002,0000003,... ที่ตัวแปร txtCodeID
    }
    }else{
    QMessageBox::information(this,"แจ้งเตือน","Error Auto GenID !");//Error GenID
    }
    connClose();//ปิดฐานข้อมูล
    }
    //==============ปิดปุ่ม==========================
    ui->txtCodePK->setEnabled(false);
    ui->txtSearch->setEnabled(false);
    ui->btnGenID->setEnabled(false);
    ui->btnEdit->setEnabled(false);
    ui->btnDelete->setEnabled(false);
    ui->btnSearch->setEnabled(false);
    //============================================
    }

    void AddDialog::eek:n_btnRefresh_clicked()
    {
    connOpen();//ติดต่อ void connOpen() ใน Headers ของ adddialog.h
    if(!db.open()){//ถ้าเปิดฐานข้อมูล MariaDB ไม่ได้
    QMessageBox::critical(this,"Error Database Connection !",db.lastError().text());
    return;
    }else{
    ui->txtCodePK->setEnabled(true);
    ui->txtSearch->setEnabled(true);
    ui->btnGenID->setEnabled(true);
    ui->btnAdd->setEnabled(true);
    ui->btnEdit->setEnabled(true);
    ui->btnDelete->setEnabled(true);
    ui->btnSearch->setEnabled(true);
    ui->txtCodePK->setText("");
    ui->txtCodeID->setText("");
    ui->txtFullName->setText("");

    QDate date = QDate::currentDate();
    ui->txtBirthDate->setDate(date);

    ui->txtSalary->setText("0.00");
    ui->txtTelephone->setText("");
    ui->txtSearch->setText("");
    }
    connClose();//ปิดฐานข้อมูล
    }

    void AddDialog::eek:n_btnAdd_clicked()
    {
    QString CodePK = ui->txtCodePK->text();//กำหนดตัวแปรเก็บค่า CodePK
    QString CodeID = ui->txtCodeID->text();//กำหนดตัวแปรเก็บค่า CodeID
    QString FullName = ui->txtFullName->text();//กำหนดตัวแปรเก็บค่า FullName

    QString BirthDate = ui->txtBirthDate->text();//รับค่าวันที่ เก็บไว้ใน QString
    QDate date = QDate::fromString(BirthDate, "yyyy-MM-dd");//แปลงวันที่จาก String ไปเป็น QDate

    double Salary = ui->txtSalary->text().toDouble();//กำหนดตัวแปรเก็บค่า เงินเดือน
    QString Telephone = ui->txtTelephone->text();//กำหนดตัวแปรเก็บค่า Telephone

    if(CodePK.isEmpty()){//เช็คว่า CodePK เท่ากับค่าว่าง
    QMessageBox::information(this,"แจ้งเตือน","กรุณากดปุ่ม GenID ด้วยครับ");//แสดงข้อความแจ้งเตือน
    return;//วนกลับไป กดปุ่ม GenID
    }else{
    if(FullName.isEmpty()){//เช็คว่า FullName เท่ากับค่าว่าง
    QMessageBox::information(this,"แจ้งเตือน","กรุณาใส่ ชื่อ-สกุล ด้วยครับ");//แสดงข้อความแจ้งเตือน
    return;//วนกลับไป ใส่ ชื่อ-สกุล
    }
    }
    //
    connOpen();//ติดต่อ void connOpen() ใน Headers ของ adddialog.h
    if(!db.open()){//ถ้าเปิดฐานข้อมูล MariaDB ไม่ได้
    QMessageBox::critical(this,"Error Database Connection !",db.lastError().text());
    return;
    }else{
    QSqlQuery sql;//กำหนดตัวแปรประมวลผล
    sql.prepare("INSERT INTO tblphone (CodePK,CodeID,FullName,BirthDate,Salary,Telephone) VALUES:)CodePK,:CodeID,:FullName,:BirthDate,:Salary,:Telephone)");//เพิ่มข้อมูล
    sql.bindValue(":CodePK",CodePK);
    sql.bindValue(":CodeID",CodeID);
    sql.bindValue(":FullName",FullName);
    sql.bindValue(":BirthDate",date);
    sql.bindValue(":Salary",Salary);
    sql.bindValue(":Telephone",Telephone);
    if(!sql.exec())
    QMessageBox::information(this,"Error Insert Data !",db.lastError().text());
    else
    QMessageBox::information(this,"รายงานสถานะ","Insert Data Successfull");//Insert Data Successfull
    //==============Clear Data=======================
    ui->txtCodePK->setEnabled(true);
    ui->txtSearch->setEnabled(true);
    ui->btnGenID->setEnabled(true);
    ui->btnEdit->setEnabled(true);
    ui->btnDelete->setEnabled(true);
    ui->btnSearch->setEnabled(true);
    ui->txtCodePK->setText("");
    ui->txtCodeID->setText("");
    ui->txtFullName->setText("");

    ui->txtSalary->setText("0.00");
    ui->txtTelephone->setText("");
    //===============================================
    }
    connClose();//ปิดฐานข้อมูล
    }


    void AddDialog::eek:n_btnSearch_clicked()
    {
    if(ui->txtSearch->text()==""){
    QMessageBox::information(this,"แจ้งเตือน","กรุณาพิมพ์ค้นหาลำดับที่ก่อน");//แสดงข้อความแจ้งเตือน
    ui->txtSearch->setText("");
    return;//วนกลับไป กดปุ่ม txtSearch Box
    }
    connOpen();//ติดต่อ void connOpen() ใน Headers ของ adddialog.h
    if(!db.open()){//ถ้าเปิดฐานข้อมูล MariaDB ไม่ได้
    QMessageBox::critical(this,"Error Database Connection !",db.lastError().text());
    return;
    }else{
    try{
    QSqlQuery sql;//กำหนดตัวแปรประมวลผล
    sql.exec("Select * From tblphone Where CodePK Like '"+ui->txtSearch->text()+"'");//ค้นหาข้อมูลจากลำดับที่
    if(!sql.next() ){
    QMessageBox::information(this,"รายงานสถานะ","ไม่พบข้อมูลที่ต้องการค้นหา");
    ui->txtSearch->setText("");
    return;
    }else{
    do{
    int CodePK = sql.value(0).toInt();//กำหนดค่า CodePK เป็น Integer
    QString StrCodePK = QString("%1").arg(CodePK);//เก็บค่าไว้ที่ StrCodePK เช่น 1,2,3...
    ui->txtCodePK->setText(StrCodePK);//แสดงค่า เช่น 1,2,3... ที่ตัวแปร txtCodePK

    ui->txtCodeID->setText(sql.value(1).toString());//แสดงค่าที่ตัวแปร txtCodeID
    ui->txtFullName->setText(sql.value(2).toString());//แสดงค่าที่ตัวแปร txtFullName

    ui->txtBirthDate->QDateEdit::setDate(sql.value(3).toDate());//แสดงค่าที่ตัวแปร txtBirthDate

    double Salary = sql.value(4).toDouble();
    QString StrSalary = QString("%1").arg(Salary, 0, 'f', 2);//เก็บค่าไว้ที่ StrSalary แสดงจุดทศนิยม สองตำแหน่ง
    ui->txtSalary->setText(StrSalary);//แสดงค่า เช่น 1,2,3... ที่ตัวแปร txtSalary
    ui->txtTelephone->setText(sql.value(5).toString());

    //==========ปิดปุ่มและtextBox================
    ui->txtCodePK->setEnabled(false);
    ui->btnGenID->setEnabled(false);
    ui->btnAdd->setEnabled(false);
    ui->btnSearch->setEnabled(false);
    ui->txtSearch->setEnabled(false);
    //========================================
    } while (sql.next());
    }
    }catch(std::exception){
    QMessageBox::information(this, "รายงานสถานะ","ไม่สามารถแสดงข้อมูลได้!");
    }
    }
    connClose();//ปิดฐานข้อมูล
    }

    void AddDialog::eek:n_btnEdit_clicked()
    {
    if(ui->txtSearch->text()==""){
    QMessageBox::information(this,"แจ้งเตือน","กรุณาพิมพ์ค้นหาลำดับที่ก่อน");//แสดงข้อความแจ้งเตือน
    ui->txtSearch->setText("");
    return;//วนกลับไป กดปุ่ม txtSearch Box
    }
    //
    connOpen();//ติดต่อ void connOpen() ใน Headers ของ adddialog.h
    if(!db.open()){//ถ้าเปิดฐานข้อมูล MariaDB ไม่ได้
    QMessageBox::critical(this,"Error Database Connection !",db.lastError().text());
    return;
    }else{
    QSqlQuery sql;//กำหนดตัวแปรประมวลผล
    QString CodePK = ui->txtCodePK->text();//กำหนดตัวแปรเก็บค่า CodePK
    QString CodeID = ui->txtCodeID->text();//กำหนดตัวแปรเก็บค่า CodeID
    QString FullName = ui->txtFullName->text();//กำหนดตัวแปรเก็บค่า FullName

    QString BirthDate = ui->txtBirthDate->text();//รับค่าวันที่ เก็บไว้ใน QString
    QDate date = QDate::fromString(BirthDate, "yyyy-MM-dd");//แปลงวันที่จาก String ไปเป็น QDate

    double Salary = ui->txtSalary->text().toDouble();//กำหนดตัวแปรเก็บค่า เงินเดือน
    QString Telephone = ui->txtTelephone->text();//กำหนดตัวแปรเก็บค่า Telephone

    sql.prepare("UPDATE tblphone SET CodePK=:CodePK,"
    "CodeID=:CodeID,"
    "FullName=:FullName,"
    "BirthDate=:BirthDate,"
    "Salary=:Salary,"
    "Telephone=:Telephone Where CodePK Like '"+CodePK+"'");
    sql.bindValue(":CodePK",CodePK);
    sql.bindValue(":CodeID",CodeID);
    sql.bindValue(":FullName",FullName);
    sql.bindValue(":BirthDate",date);
    sql.bindValue(":Salary",Salary);
    sql.bindValue(":Telephone",Telephone);

    if(!sql.exec())
    QMessageBox::information(this,"Error Update Data !",db.lastError().text());
    else
    QMessageBox::information(this,"รายงานสถานะ","Update Data Successfull");//Update Data Successfull
    //==============Clear Data=======================
    ui->txtCodePK->setEnabled(true);
    ui->txtSearch->setEnabled(true);
    ui->btnGenID->setEnabled(true);
    ui->btnEdit->setEnabled(true);
    ui->btnDelete->setEnabled(true);
    ui->btnSearch->setEnabled(true);
    ui->txtCodePK->setText("");
    ui->txtCodeID->setText("");
    ui->txtFullName->setText("");
    ui->txtSalary->setText("0.00");
    ui->txtTelephone->setText("");
    ui->txtSearch->setText("");
    //===============================================
    }
    connClose();//ปิดฐานข้อมูล
    }

    void AddDialog::eek:n_btnDelete_clicked()
    {
    if(ui->txtSearch->text()==""){
    QMessageBox::information(this,"แจ้งเตือน","กรุณาพิมพ์ค้นหาลำดับที่ก่อน");//แสดงข้อความแจ้งเตือน
    ui->txtSearch->setText("");
    return;//วนกลับไป กดปุ่ม txtSearch Box
    }

    QMessageBox::StandardButton reply;
    reply = QMessageBox::question(this, "ยืนยันการลบ", "ท่านต้องการลบข้อมูลลำดับที่ :" + ui->txtSearch->text() + " จริงหรือไม่",
    QMessageBox::Yes|QMessageBox::No);
    if (reply == QMessageBox::Yes) {//กดปุ่ม Yes เพื่อทำการลบข้อมูล
    //ต้องการลบข้อมูลนี้
    connOpen();//ติดต่อ void connOpen() ใน Headers ของ adddialog.h
    if(!db.open()){//ถ้าเปิดฐานข้อมูล MariaDB ไม่ได้
    QMessageBox::critical(this,"Error Database Connection !",db.lastError().text());
    return;
    }else{
    QSqlQuery sql;//กำหนดตัวแปรประมวลผล
    QString CodePK = ui->txtSearch->text();//กำหนดตัวแปรเก็บค่า Search

    sql.prepare(" Delete From tblphone WHERE CodePK Like '"+CodePK+"'");
    sql.bindValue(":CodePK",CodePK);

    if(!sql.exec())
    QMessageBox::information(this,"Error Delete Data !",db.lastError().text());
    else
    QMessageBox::information(this,"รายงานสถานะ","Delete Data Successfull");//Delete Data Successfull
    //==============Clear Data=======================
    ui->txtCodePK->setEnabled(true);
    ui->txtSearch->setEnabled(true);
    ui->btnGenID->setEnabled(true);
    ui->btnEdit->setEnabled(true);
    ui->btnDelete->setEnabled(true);
    ui->btnSearch->setEnabled(true);
    ui->txtCodePK->setText("");
    ui->txtCodeID->setText("");
    ui->txtFullName->setText("");
    ui->txtSalary->setText("0.00");
    ui->txtTelephone->setText("");
    ui->txtSearch->setText("");
    //===============================================
    }
    connClose();//ปิดฐานข้อมูล
    } else {//กดปุ่ม No เพื่อไม่ต้องการลบข้อมูล
    return;//ไม่ต้องการลบข้อมูล กลับไปที่เดิม
    //QApplication::quit();
    }

    }
     
  15. jongjang

    jongjang สมาชิกใหม่

    วันที่สมัครสมาชิก:
    13 สิงหาคม 2015
    โพสต์:
    3
    ค่าพลัง:
    +0
    Qt widget calendar ทำยังไงจะเปลี่ยนจากเลขไทย ให้เป็นเลขอารบิกครับ

    Qt widget calendar ทำยังไงจะเปลี่ยนจากเลขไทย ให้เป็นเลขอารบิกครับ
     
  16. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
  17. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    อยากชัวร์เปลี่ยนแปลงปฏิทินเป็น United States
     
  18. jongjang

    jongjang สมาชิกใหม่

    วันที่สมัครสมาชิก:
    13 สิงหาคม 2015
    โพสต์:
    3
    ค่าพลัง:
    +0
    ได้วิธีแก้แล้วครับงมมาตั้งนาน

    Untitled.png
     
  19. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    อยากเขียนแบบ Advance ผมว่าลองหันมาเล่น Java TextMode (ไม่ยอมคลิ๊ก Tools และไม่ลง Plugin WindowBuilder) ของดีทั้งฟรีด้วย น่ะครับ

    จะเล่น Eclipse หรือ NetBeans ก็เหมือนกันเด๊ะหากเขียนแบบ TextMode
     
  20. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    ที่ผมไม่อยากให้เล่น Qt C++ GUI เพราะว่าต้องแบกรับไฟล์ Qt5Cored.dll =80MB กว่า ๆ และ .dll ตัวอื่นที่พร้อมจะรันในเครื่องอื่น
     

    ไฟล์ที่แนบมา:

    • Qt_C++.png
      Qt_C++.png
      ขนาดไฟล์:
      137.8 KB
      เปิดดู:
      86
    แก้ไขครั้งล่าสุดโดยผู้ดูแล: 15 สิงหาคม 2015

แชร์หน้านี้

Loading...