1 //main.cpp 2 #include "mywin.h" 3 #include "foodtype.h" 4 #include <QApplication> 5 #include <QSqlDatabase> 6 #include <QDebug> 7 #include <QSqlDriver> 8 #include <QSqlQuery> 9 #include <QMessageBox> 10 int main(int argc, char *argv[]) 11 { 12 QApplication a(argc, argv); 13 // QSqlDatabase db; 14 QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");//数据库必须在声明的时候指定,否则会出错 15 qDebug()<< db.drivers();//查看支持的数据库 16 //db.addDatabase("QMYSQL"); 17 db.setDatabaseName("mydb"); 18 db.setHostName("192.168.2.90"); 19 db.setUserName("who"); 20 db.setPassword("123456"); 21 if(!db.open()) 22 { 23 QMessageBox::critical(0,"error","open databases failed"); 24 exit(0); 25 } 26 qDebug()<<db.tables(); 27 28 29 QSqlQuery query; 30 query.exec("select *from foodtype;"); 31 while(query.next()) 32 { 33 qDebug()<<query.value(0).toInt();//转化一下,要不会把数据类型一块打印出来 34 qDebug()<<query.value(1).toString(); 35 } 36 37 qDebug()<<query.exec("show tables;"); 38 MyWin w; 39 w.show(); 40 41 FoodType foodtype; 42 foodtype.show(); 43 return a.exec(); 44 }
1 //mywin.cpp 2 #include "mywin.h" 3 #include "ui_mywin.h" 4 #include <QSqlQuery> 5 #include <QDebug> 6 #include <QMessageBox> 7 #include <QString> 8 9 MyWin::MyWin(QWidget *parent) : 10 QWidget(parent), 11 ui(new Ui::MyWin) 12 { 13 ui->setupUi(this); 14 15 QSqlQuery query; 16 query.exec("select *from foodtype;"); 17 while(query.next()) 18 { 19 // ui->comboBox->addItem(query.value(0).toInt(),query.value(1).toString());//将菜系添加到下拉列表中,必须在后面加上为数据项 20 //,要不后面无法获取fid的下标; 21 ui->comboBox->addItem(query.value(1).toString(),query.value(0).toInt()); 22 } 23 } 24 25 MyWin::~MyWin() 26 { 27 delete ui; 28 } 29 30 void MyWin::on_pushButton_2_clicked() 31 { 32 this->close(); 33 } 34 35 void MyWin::on_pushButton_clicked() 36 { 37 QSqlQuery query; 38 int fid=ui->comboBox->currentData().toInt();//获取下拉列表里的数据值 39 //qDebug()<<fid; 40 if(ui->line_id->text().isEmpty()) 41 { 42 QMessageBox::critical(this,"error","please input id"); 43 ui->line_id->setFocus();//聚焦光标 44 return;//exit current function 45 } 46 47 if(ui->line_name->text().isEmpty()) 48 { 49 QMessageBox::critical(this,"error","please input name"); 50 ui->line_name->setFocus();//聚焦光标 51 return; 52 } 53 if(ui->line_price->text().isEmpty()) 54 { 55 QMessageBox::critical(this,"error","please input price"); 56 ui->line_price->setFocus();//聚焦光标 57 return; 58 } 59 //int id=ui->line_id->text().toInt(); //用Qstring 类型声明id,要不下面打印id号时会报错 60 QString id=ui->line_id->text(); 61 QString str2("select *from food where fid=%1;"); 62 qDebug()<< query.exec(str2.arg(id)); 63 while(query.next()) 64 { 65 QMessageBox::critical(this,"error","id" + id + "used"); 66 ui->line_id->setFocus(); 67 return; 68 } 69 70 QMessageBox mesgBox(this); 71 mesgBox.setText("The document has been modified."); 72 mesgBox.setInformativeText("Do you want to save you change?"); 73 mesgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Cancel |QMessageBox::Discard); 74 int ret=mesgBox.exec(); 75 76 QString name=ui->line_name->text(); 77 float price=ui->line_price->text().toFloat(); 78 QString mem =ui->textEdit->document()->toPlainText();//多行编辑的显示 79 80 QString str("insert into food values(%1,'%2',%3,%4,'%5');"); 81 switch(ret){ 82 case QMessageBox::Save: 83 query.exec(str.arg(id).arg(name).arg(fid).arg(price).arg(mem)); 84 break; 85 case QMessageBox::Cancel: 86 // return; 87 break; 88 case QMessageBox::Discard: 89 ui->line_id->setText(" "); 90 return; 91 break; 92 } 93 }
1 //显示tableview里的数据时,要用到《QsqlQueryModel》,
#include "ui_foodtype.h" 2 //#include <QSqlTableModel> 3 #include <QSqlQueryModel> 4 5 FoodType::FoodType(QWidget *parent) : 6 QWidget(parent), 7 ui(new Ui::FoodType) 8 { 9 ui->setupUi(this); 10 QSqlQueryModel *model=new QSqlQueryModel(this); 11 // model->setTable("菜单信息"); 12 model->setQuery("select fid,food.name,ftypeid,fprice,id,foodtype.name,mem from food inner join foodtype on id=fid;"); 13 14 ui->tableView->setModel(model); 15 } 16 17 FoodType::~FoodType() 18 { 19 delete ui; 20 }