QT数据库SQLITE数据库操作

打印 上一主题 下一主题

主题 788|帖子 788|积分 2364

一、Qt  SQl模块

        1、在项目配置文件xxx.pro中的“QT += core gui”反面添加:

                QT += sql

        2、输入数据库访问的类

        (1):QSQL                             (包罗整个QtSQL模块中使用的各种标识符)
        (2):QSqlDriverCreatorBase    (SQL驱动步伐工厂的基类)
        (3):QSqlDriverCreator          (模板类,为特定的驱动步伐类型提供SQL驱动步伐工厂)
        (4):QSqlDatabase                (表现与数据库的毗连)
        (5):QSqlDriver                        (用于访问特定SQL数据库的抽象基类)
        (6):QSqlError                         (数据库错误信息)
        (7):QSqlField                         (处理SQL数据库表和视图中的字段)
        (8):QSqlIndex                        (操作和描述数据库索引的函数)
        (9):QSqlQuery                       (执行和操作SQL语句的方法)
        (10):QSqlRecord                 (封装数据库记录)
          (11)   :  QSqlResult                     (用于从特定的SQL数据库访问数据的抽象接口)
        (12):QSqlQueryModel         (SQL效果集的只读数据模型)
        (13):QSqlRelationalTableModel (具有外键支持的单个数据库表的可编辑数据模型)
        (14):QSqlTableModel            (单个数据库表的可编程数据模型)
        
二、访问SQLite数据库

        下载SQLite数据库应用步伐(方便Windows直接查看和编辑)(可不下载,QT可直接编辑)
下载链接:SQLite administration | SQLite Expert
         数据库操作语句:

                1、创建SQLITE数据库毗连

                      (1)  QSqlDatabase db_student = QSqlDatabase::addDatabase("QSQLITE");使用SQLITE数据库, 数据库毗连缺省的名字为 "qt_sql_default_connection"
    
                       (2) QSqlDatabase db_student = QSqlDatabase::addDatabase("QSQLITE", "my_db_connection");//使用SQLITE数据库, 指定数据库毗连的名字为"my_db_connection"
                 2、设置数据库的文件名

                           db_student.setDatabaseName(db_file_name);
                 3、打开数据库   

                         if (!db_student.open())
                            {
                                qDebug() << "打开数据库失败1";
                                    }    
                4、关闭数据库

                        db_student.close();
                5、使用当前的数据库毗连 执行SQL操作

                       a、指定数据库毗连

                        (1)QSqlQuery query(db_student); //指定一个数据库的毗连
                        (2)QSqlQuery query;  //不指定数据库毗连, 它会使用缺省的数据库毗连 "qt_sql_default_connection"           
                        b、创建表    

                        QString queryStr = "create table Student (id INTEGER PRIMARY KEY AUTOINCREMENT,  name VARCHAR(40) NOT NULL,  score INTEGER NOT NULL, class VARCHAR(40) NOT NULL)";//AUTOINCREMENT表现该列为整数递增,如果为空则主动填入1,然后在下面的每一行都会主动加1;PRIMARY KEY表现该列为列表的主键;VARCHAR(40)表现该列为可变长字符串(40字节),默认只能存储英文、数字、大概UTF-8编码的字符,最多40个字节;INTEGER表现该列为带符号的整数:NOT NULL表现该列的内容不能为空。
                        if (!query.exec(queryStr)) //执行创建表的操作(query.exec(queryStr))
                        {
                        qDebug() << "创建数据库表失败";
                        qDebug() << query.lastError().text();
                         }    
                        c、插入数据

         //数据插入方式1    
        queryStr = "insert into Student values('1', '小A',87)";
        if (!query.exec(queryStr))
        {
        qDebug() << "插入数据失败";
        qDebug() << query.lastError().text();
        }
    
    //数据插入方式2
    queryStr = "insert into Student values(?,?,?)";
    query.prepare(queryStr);
    query.addBindValue("2309250002");
    query.addBindValue("李四");
    query.addBindValue(82);
    if (!query.exec(queryStr))
    {
        qDebug() << "插入数据失败2";
        qDebug() << query.lastError().text();
    }    
    
    //数据插入方式3
    QString queryStr = "insert into Student values(:id, :name,:score)";
    query.prepare(queryStr);
    query.bindValue(":id", ui->le_id->text());
    query.bindValue(":name", ui->le_name->text());
    query.bindValue(":score", ui->le_score->text().toInt());
    if (!query.exec(queryStr))
    {
        qDebug() << queryStr << " failed";
        qDebug() << query.lastError().text();
    }
                        d、查询数据

//查询特定表中所有数据
    QString queryStr = "select * from Student";
    if (!query.exec(queryStr))
    {
        qDebug() << queryStr << " failed";
        qDebug() << query.lastError().text();
    }    
//查询特定表中符合某一条内容的数据
    QString queryStr = "select * from Student where id = :id";
    query.prepare(queryStr);
    query.bindValue(":id", ui->le_id->text());
    if (!query.exec(queryStr))
    {
        qDebug() << queryStr << " failed";
        qDebug() << query.lastError().text();
    }
    while (query.next())
    {
        ui->le_name->setText(query.value(1).toString());
        ui->le_score->setText(query.value(2).toString());
    }   
                         e、修改数据    

QString queryStr = "update Student set name=?, score=? where id=?";
    query.prepare(queryStr);
    query.addBindValue(ui->le_name->text());
    query.addBindValue(ui->le_score->text());
    query.addBindValue(ui->le_id->text());
    if (!query.exec(queryStr))
    {
        qDebug()  << queryStr << " failed";
        qDebug() << query.lastError().text();
    }    
                          f、删除数据    

//删除数据库特定表中特定数据
QString queryStr = "delete from Student where id = :id";
    query.prepare(queryStr);
    query.bindValue(":id", ui->le_id->text());
    if (!query.exec())
    {
        qDebug() << queryStr << " failed";
        qDebug() << query.lastError().text();
    }
//删除数据库中特定表(清空数据表)
QString queryStr = "DROP TABLE Student";
三、新建一个SQLite数据库操作

一、添加头文件

项目文件添加QT += sql

在.h文件中添加头文件如下
  1. #include <QtSql/QSqlDatabase>
  2. #include <QtSql/QSqlError>
  3. #include <QtSql/QSqlQuery>
  4. #include <QDebug>
复制代码
二、编辑.cpp文件实现学生信息表的创建和数据插入

        新建学生信息表并插入数据信息
  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. Widget::Widget(QWidget *parent)
  4.     : QWidget(parent)
  5.     , ui(new Ui::Widget)
  6. {
  7.     ui->setupUi(this);
  8.     QStringList names;//创建学生名字信息表
  9.     names <<"小A" << "小B"<< "小C"<< "大D"<< "大E"<< "大F"<< "中G"<< "中H"<< "中I"<< "王J"<< "王K"<< "毛L"<< "毛M"<< "黄N"<< "黄O"<< "思P"<< "HQ"<< "GYUR";
  10.     QStringList clases;//创建学生班级信息表
  11.     clases <<"高一、一班"<<"高一、二班"<<"高一、三班"<<"高二、一班"<<"高二、二班"<<"高二、三班"<<"高三、一班"<<"高三、二班"<<"高三、三班";
  12.     //创建数据库
  13.     QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");//创建SQLITE数据库,使用缺省连接
  14.     //设置数据库文件名
  15.     db.setDatabaseName("MySqlit_db");
  16.     //打开数据库
  17.     if(!db.open())//打开失败
  18.         qDebug()<< db.lastError().text();//输出错误信息
  19.     else          //打开成功
  20.     {
  21.         qDebug()<< "数据库打开成功";
  22.         //数据库操作
  23.         //1、指定数据库连接
  24.         QSqlQuery query(db);//连接数据库db
  25.         query.exec("DROP TABLE students");//清空一下表students,防止数据库中有students表从而创建失败
  26.         //2、创建一个学生信息表
  27.         query.exec("CREATE TABLE students("
  28.                    "id INTEGER PRIMARY KEY AUTOINCREMENT,"
  29.                    "name VARCHAR(40) NOT NULL,"
  30.                    "score INTEGER NOT NULL,"
  31.                    "class VARCHAR(40) NOT NULL)");
  32.         qDebug()<< "创建学生信息表成功(id,name,score,class)";
  33.         //3、为每一列标题添加绑定值
  34.         query.prepare("INSERT INTO students (name, score, class)"
  35.                       "VALUES (:name, :score, :class)");
  36.         //4、插入对应数据
  37.         foreach (QString name, names) {
  38.             query.bindValue(":name", name);//向绑定值中加入名字
  39.             query.bindValue(":score", rand()%101);//随机获取0~101的值传入成绩中
  40.             query.bindValue(":class", clases[rand()%8]);//随机获取班级,并传入绑定值中
  41.             //5、将对应数据加入数据库
  42.             query.exec();//执行绑定的操作
  43.         }
  44.     }
  45. }
复制代码
步伐运行效果:

使用SQLite Expert Personal 3软件查看数据库学生信息表如下:

三、QT上使用控件QTableWidget举行表现

        1、拖动QTableWidget控件到ui界面、拖动一个QPushButton控件来实现查询操作


        2、点击按键转到槽编写函数实现查询功能

                因为此处需要使用数据库db,以是将数据库界说为全局变量方便一些;直接在.h文件里面界说:QSqlDatabase db;//数据库对象,之后.cpp文件直接使用db就行;
        (1)、查询所有对象

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. Widget::Widget(QWidget *parent)
  4.     : QWidget(parent)
  5.     , ui(new Ui::Widget)
  6. {
  7.     ui->setupUi(this);
  8.     ui->tabWidget->setTabText(0, "Select");
  9.     ui->tabWidget->setTabText(1, "Delete");
  10.     ui->pushButton->setText("查询数据库");
  11.     QStringList names;//创建学生名字信息表
  12.     names <<"小A" << "小B"<< "小C"<< "大D"<< "大E"<< "大F"<< "中G"<< "中H"<< "中I"<< "王J"<< "王K"<< "毛L"<< "毛M"<< "黄N"<< "黄O"<< "思P"<< "HQ"<< "GYUR";
  13.     QStringList clases;//创建学生班级信息表
  14.     clases <<"高一、一班"<<"高一、二班"<<"高一、三班"<<"高二、一班"<<"高二、二班"<<"高二、三班"<<"高三、一班"<<"高三、二班"<<"高三、三班";
  15.     //创建数据库
  16.     db = QSqlDatabase::addDatabase("QSQLITE");//创建SQLITE数据库,使用缺省连接
  17.     //设置数据库文件名
  18.     db.setDatabaseName("MySqlit_db");
  19.     //打开数据库
  20.     if(!db.open())//打开失败
  21.         qDebug()<< db.lastError().text();//输出错误信息
  22.     else          //打开成功
  23.     {
  24.         qDebug()<< "数据库打开成功";
  25.         //数据库操作
  26.         //1、指定数据库连接
  27.         QSqlQuery query(db);//连接数据库db
  28.         query.exec("DROP TABLE students");//清空一下表students,防止数据库中有students表从而创建失败
  29.         //2、创建一个学生信息表
  30.         query.exec("CREATE TABLE students("
  31.                    "id INTEGER PRIMARY KEY AUTOINCREMENT,"
  32.                    "name VARCHAR(40) NOT NULL,"
  33.                    "score INTEGER NOT NULL,"
  34.                    "class VARCHAR(40) NOT NULL)");
  35.         qDebug()<< "创建学生信息表成功(id,name,score,class)";
  36.         //3、为每一列标题添加绑定值
  37.         query.prepare("INSERT INTO students (name, score, class)"
  38.                       "VALUES (:name, :score, :class)");
  39.         //4、插入对应数据
  40.         foreach (QString name, names) {
  41.             query.bindValue(":name", name);//向绑定值中加入名字
  42.             query.bindValue(":score", rand()%101);//随机获取0~101的值传入成绩中
  43.             query.bindValue(":class", clases[rand()%8]);//随机获取班级,并传入绑定值中
  44.             //5、将对应数据加入数据库
  45.             query.exec();//执行绑定的操作
  46.         }
  47.     }
  48.     //设置控件QTableWidget属性
  49.     ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); // 禁止编辑单元格内容
  50. }
  51. Widget::~Widget()
  52. {
  53.     delete ui;
  54. }
  55. //点击按钮查询数据库并显示查询到的所有信息
  56. void Widget::on_pushButton_clicked()
  57. {
  58.     QSqlQuery query(db);
  59.     if(!query.exec("SELECT * FROM students"))//如果查询失败
  60.     {
  61.         qDebug()<<"查询学生信息表失败  "<<db.lastError().text();
  62.     }
  63.     else//查询成功
  64.     {
  65.         int num = 0;
  66.         //初始化tableWidget控件
  67.         ui->tableWidget->setColumnCount(4);//设置控件为4列
  68.         ui->tableWidget->setHorizontalHeaderLabels(QStringList() << "id" << "name" << "score" << "class");
  69.         while(query.next())
  70.         {
  71.             //存储数据
  72.             QString id = query.value(0).toString();
  73.             QString name = query.value(1).toString();
  74.             QString score = query.value(2).toString();
  75.             QString class1 = query.value(3).toString();
  76.             QTableWidgetItem *item0 = new QTableWidgetItem(id);
  77.             QTableWidgetItem *item1 = new QTableWidgetItem(name);
  78.             QTableWidgetItem *item2 = new QTableWidgetItem(score);
  79.             QTableWidgetItem *item3 = new QTableWidgetItem(class1);
  80.             // 设置数据内容居中对齐
  81.             item0->setTextAlignment(Qt::AlignCenter);
  82.             item1->setTextAlignment(Qt::AlignCenter);
  83.             item2->setTextAlignment(Qt::AlignCenter);
  84.             item3->setTextAlignment(Qt::AlignCenter);
  85.             ui->tableWidget->setRowCount(num+1);//设置对应行数
  86.             //加载数据到控件中显示
  87.             ui->tableWidget->setItem(num, 0, item0);
  88.             ui->tableWidget->setItem(num, 1, item1);
  89.             ui->tableWidget->setItem(num, 2, item2);
  90.             ui->tableWidget->setItem(num, 3, item3);
  91.             num++;
  92.         }
  93.     }
  94. }
复制代码
               

        (2)、查询特定对象


  1. //查询符合条件的项目
  2. void Widget::on_pushButton_2_clicked()
  3. {
  4.     if(ui->lineEdit->text().isEmpty())
  5.     {
  6.         QMessageBox mesbox;
  7.         mesbox.setText("请输入内容!!!");
  8.         mesbox.exec();
  9.     }
  10.     else
  11.     {
  12.         QString info = ui->lineEdit->text();
  13.         QSqlQuery query;
  14.         if(ui->comboBox->currentIndex() == 0)
  15.         {
  16.             query.prepare("select * from students where name=:info");
  17.             query.bindValue(":info", info);
  18.             if(query.exec())
  19.             {
  20.                 int num = 0;
  21.                 //初始化tableWidget控件
  22.                 ui->tableWidget->setColumnCount(4);//设置控件为4列
  23.                 ui->tableWidget->setHorizontalHeaderLabels(QStringList() << "id" << "name" << "score" << "class");
  24.                 while(query.next())
  25.                 {
  26.                     //存储数据
  27.                     QString id = query.value(0).toString();
  28.                     QString name = query.value(1).toString();
  29.                     QString score = query.value(2).toString();
  30.                     QString class1 = query.value(3).toString();
  31.                     QTableWidgetItem *item0 = new QTableWidgetItem(id);
  32.                     QTableWidgetItem *item1 = new QTableWidgetItem(name);
  33.                     QTableWidgetItem *item2 = new QTableWidgetItem(score);
  34.                     QTableWidgetItem *item3 = new QTableWidgetItem(class1);
  35.                     // 设置数据内容居中对齐
  36.                     item0->setTextAlignment(Qt::AlignCenter);
  37.                     item1->setTextAlignment(Qt::AlignCenter);
  38.                     item2->setTextAlignment(Qt::AlignCenter);
  39.                     item3->setTextAlignment(Qt::AlignCenter);
  40.                     ui->tableWidget->setRowCount(num+1);//设置对应行数
  41.                     //加载数据到控件中显示
  42.                     ui->tableWidget->setItem(num, 0, item0);
  43.                     ui->tableWidget->setItem(num, 1, item1);
  44.                     ui->tableWidget->setItem(num, 2, item2);
  45.                     ui->tableWidget->setItem(num, 3, item3);
  46.                     num++;
  47.                 }
  48.             }
  49.             else
  50.             {
  51.                 qDebug()<<query.lastError().text();
  52.             }
  53.         }
  54.         if(ui->comboBox->currentIndex() == 1)
  55.         {
  56.             query.prepare("select * from students where class=:info");
  57.             query.bindValue(":info", info);
  58.             if(query.exec())
  59.             {
  60.                 int num = 0;
  61.                 //初始化tableWidget控件
  62.                 ui->tableWidget->setColumnCount(4);//设置控件为4列
  63.                 ui->tableWidget->setHorizontalHeaderLabels(QStringList() << "id" << "name" << "score" << "class");
  64.                 while(query.next())
  65.                 {
  66.                     //存储数据
  67.                     QString id = query.value(0).toString();
  68.                     QString name = query.value(1).toString();
  69.                     QString score = query.value(2).toString();
  70.                     QString class1 = query.value(3).toString();
  71.                     QTableWidgetItem *item0 = new QTableWidgetItem(id);
  72.                     QTableWidgetItem *item1 = new QTableWidgetItem(name);
  73.                     QTableWidgetItem *item2 = new QTableWidgetItem(score);
  74.                     QTableWidgetItem *item3 = new QTableWidgetItem(class1);
  75.                     // 设置数据内容居中对齐
  76.                     item0->setTextAlignment(Qt::AlignCenter);
  77.                     item1->setTextAlignment(Qt::AlignCenter);
  78.                     item2->setTextAlignment(Qt::AlignCenter);
  79.                     item3->setTextAlignment(Qt::AlignCenter);
  80.                     ui->tableWidget->setRowCount(num+1);//设置对应行数
  81.                     //加载数据到控件中显示
  82.                     ui->tableWidget->setItem(num, 0, item0);
  83.                     ui->tableWidget->setItem(num, 1, item1);
  84.                     ui->tableWidget->setItem(num, 2, item2);
  85.                     ui->tableWidget->setItem(num, 3, item3);
  86.                     num++;
  87.                 }
  88.             }
  89.             else
  90.             {
  91.                 qDebug()<<query.lastError().text();
  92.             }
  93.         }
  94.         if(ui->comboBox->currentIndex() == 2)
  95.         {
  96.             query.prepare("select * from students where score=:info");
  97.             query.bindValue(":info", info);
  98.             if(query.exec())
  99.             {
  100.                 int num = 0;
  101.                 //初始化tableWidget控件
  102.                 ui->tableWidget->setColumnCount(4);//设置控件为4列
  103.                 ui->tableWidget->setHorizontalHeaderLabels(QStringList() << "id" << "name" << "score" << "class");
  104.                 while(query.next())
  105.                 {
  106.                     //存储数据
  107.                     QString id = query.value(0).toString();
  108.                     QString name = query.value(1).toString();
  109.                     QString score = query.value(2).toString();
  110.                     QString class1 = query.value(3).toString();
  111.                     QTableWidgetItem *item0 = new QTableWidgetItem(id);
  112.                     QTableWidgetItem *item1 = new QTableWidgetItem(name);
  113.                     QTableWidgetItem *item2 = new QTableWidgetItem(score);
  114.                     QTableWidgetItem *item3 = new QTableWidgetItem(class1);
  115.                     // 设置数据内容居中对齐
  116.                     item0->setTextAlignment(Qt::AlignCenter);
  117.                     item1->setTextAlignment(Qt::AlignCenter);
  118.                     item2->setTextAlignment(Qt::AlignCenter);
  119.                     item3->setTextAlignment(Qt::AlignCenter);
  120.                     ui->tableWidget->setRowCount(num+1);//设置对应行数
  121.                     //加载数据到控件中显示
  122.                     ui->tableWidget->setItem(num, 0, item0);
  123.                     ui->tableWidget->setItem(num, 1, item1);
  124.                     ui->tableWidget->setItem(num, 2, item2);
  125.                     ui->tableWidget->setItem(num, 3, item3);
  126.                     num++;
  127.                 }
  128.             }
  129.             else
  130.             {
  131.                 qDebug()<<query.lastError().text();
  132.             }
  133.         }
  134.     }
  135. }
复制代码
        (3)、删除所有数据

  1. //删除所有数据
  2. void Widget::on_pushButton_4_clicked()
  3. {
  4.     QSqlQuery query(db);
  5.     if(!query.exec("delete FROM students"))//如果删除失败
  6.         qDebug()<<"删除所有学生信息失败  "<<db.lastError().text();
  7.     else//删除成功
  8.     {
  9.         QMessageBox mybox;
  10.         mybox.setText("删除成功,请重新查询数据库查看");
  11.         mybox.exec();
  12.     }
  13. }
复制代码
        (4)、删除特定对象

  1. //删除特定项void Widget::on_pushButton_3_clicked(){    if(ui->lineEdit->text().isEmpty())    {        QMessageBox mesbox;        mesbox.setText("请输入内容!!!");        mesbox.exec();    }    else    {        QString info = ui->lineEdit->text();        QSqlQuery query;        if(ui->comboBox->currentIndex() == 0)        {            query.prepare("delete from students where name=:info");            query.bindValue(":info", info);            if(query.exec())            {                qDebug()<<"删除乐成项目name = "<<info;            }            else            {                qDebug()<<query.lastError().text();            }        }        if(ui->comboBox->currentIndex() == 1)        {            query.prepare("delete from students where class=:info");            query.bindValue(":info", info);            if(query.exec())            {                 qDebug()<<"删除乐成项目 class = "<<info;            }            else            {                qDebug()<<query.lastError().text();            }        }        if(ui->comboBox->currentIndex() == 2)        {            query.prepare("delete from students where score=:info");            query.bindValue(":info", info);            if(query.exec())            {                 qDebug()<<"删除乐成项目 score = "<<info;            }            else            {                qDebug()<<query.lastError().text();            }        }    }}//删除所有数据
  2. void Widget::on_pushButton_4_clicked()
  3. {
  4.     QSqlQuery query(db);
  5.     if(!query.exec("delete FROM students"))//如果删除失败
  6.         qDebug()<<"删除所有学生信息失败  "<<db.lastError().text();
  7.     else//删除成功
  8.     {
  9.         QMessageBox mybox;
  10.         mybox.setText("删除成功,请重新查询数据库查看");
  11.         mybox.exec();
  12.     }
  13. }
复制代码

           (5)、插入对象


  1. //插入数据
  2. void Widget::on_pushButton_5_clicked()
  3. {
  4.     QSqlQuery query(db);
  5.     QString str = "INSERT INTO students VALUES(:id, :name, :score,  :class)";
  6.     query.prepare(str);
  7.     query.bindValue(":id", ui->le_id->text().toInt());
  8.     query.bindValue(":name", ui->le_name->text());
  9.     query.bindValue(":score", ui->le_score->text().toInt());
  10.     query.bindValue(":class", ui->le_class->text());
  11.     if(query.exec())
  12.         qDebug()<<"数据插入成功";
  13.     else
  14.         qDebug()<<query.lastError().text();
  15. }
复制代码
                (6)、更新特定对象


  1. //更新数据
  2. void Widget::on_pushButton_6_clicked()
  3. {
  4.     QString info1 = ui->le_updata_1->text();
  5.     QString info2 = ui->le_updata_2->text();
  6.     QSqlQuery query(db);
  7.     //根据id去更新
  8.     if(ui->comboBox_2->currentIndex() == 0)//id
  9.     {
  10.         if(ui->comboBox_3->currentIndex() == 0)//name
  11.         {
  12.             query.prepare("update students set name=:name where id=:id1");
  13.             query.bindValue(":name", info2);
  14.             query.bindValue(":id1", info1.toInt());
  15.             if(query.exec())
  16.                 qDebug()<<info1<<" name更新成功";
  17.             else
  18.                 qDebug()<<query.lastError().text();
  19.         }
  20.         if(ui->comboBox_3->currentIndex() == 1)//score
  21.         {
  22.             query.prepare("update students set score=:score where id=:id1");
  23.             query.bindValue(":score", info2.toInt());
  24.             query.bindValue(":id1", info1.toInt());
  25.             if(query.exec())
  26.                 qDebug()<<info1<<" score更新成功";
  27.             else
  28.                 qDebug()<<query.lastError().text();
  29.         }
  30.         if(ui->comboBox_3->currentIndex() == 2)//class
  31.         {
  32.             query.prepare("update students set class=:class where id=:id1");
  33.             query.bindValue(":class", info2);
  34.             query.bindValue(":id1", info1.toInt());
  35.             if(query.exec())
  36.                 qDebug()<<info1<<" class更新成功";
  37.             else
  38.                 qDebug()<<query.lastError().text();
  39.         }
  40.     }
  41.     //根据name去更新
  42.     if(ui->comboBox_2->currentIndex() == 1)//name
  43.     {
  44.         if(ui->comboBox_3->currentIndex() == 0)//name
  45.         {
  46.             query.prepare("update students set name=:name where name=:name1");
  47.             query.bindValue(":name", info2);
  48.             query.bindValue(":name1", info1);
  49.             if(query.exec())
  50.                 qDebug()<<info1<<" name更新成功";
  51.             else
  52.                 qDebug()<<query.lastError().text();
  53.         }
  54.         if(ui->comboBox_3->currentIndex() == 1)//score
  55.         {
  56.             query.prepare("update students set score=:score where name=:name");
  57.             query.bindValue(":score", info2.toInt());
  58.             query.bindValue(":name", info1);
  59.             if(query.exec())
  60.                 qDebug()<<info1<<" score更新成功";
  61.             else
  62.                 qDebug()<<query.lastError().text();
  63.         }
  64.         if(ui->comboBox_3->currentIndex() == 2)//class
  65.         {
  66.             query.prepare("update students set class=:class where name=:name");
  67.             query.bindValue(":class", info2);
  68.             query.bindValue(":name", info1);
  69.             if(query.exec())
  70.                 qDebug()<<info1<<" class更新成功";
  71.             else
  72.                 qDebug()<<query.lastError().text();
  73.         }
  74.     }
  75.     //根据score去更新
  76.     if(ui->comboBox_2->currentIndex() == 2)//score
  77.     {
  78.         if(ui->comboBox_3->currentIndex() == 0)//name
  79.         {
  80.             query.prepare("update students set name=:name where score=:score");
  81.             query.bindValue(":name", info2);
  82.             query.bindValue(":score", info1.toInt());
  83.             if(query.exec())
  84.                 qDebug()<<info1<<" name更新成功";
  85.             else
  86.                 qDebug()<<query.lastError().text();
  87.         }
  88.         if(ui->comboBox_3->currentIndex() == 1)//score
  89.         {
  90.             query.prepare("update students set score=:score where score=:score1");
  91.             query.bindValue(":score", info2.toInt());
  92.             query.bindValue(":score1", info1.toInt());
  93.             if(query.exec())
  94.                 qDebug()<<info1<<" score更新成功";
  95.             else
  96.                 qDebug()<<query.lastError().text();
  97.         }
  98.         if(ui->comboBox_3->currentIndex() == 2)//class
  99.         {
  100.             query.prepare("update students set class=:class where score=:score");
  101.             query.bindValue(":class", info2);
  102.             query.bindValue(":score", info1.toInt());
  103.             if(query.exec())
  104.                 qDebug()<<info1<<" class更新成功";
  105.             else
  106.                 qDebug()<<query.lastError().text();
  107.         }
  108.     }
  109.     //根据class去更新
  110.     if(ui->comboBox_2->currentIndex() == 3)//class
  111.     {
  112.         if(ui->comboBox_3->currentIndex() == 0)//name
  113.         {
  114.             query.prepare("update students set name=:name where calss=:class");
  115.             query.bindValue(":name", info2);
  116.             query.bindValue(":class", info1);
  117.             if(query.exec())
  118.                 qDebug()<<info1<<" class更新成功";
  119.             else
  120.                 qDebug()<<query.lastError().text();
  121.         }
  122.         if(ui->comboBox_3->currentIndex() == 1)//score
  123.         {
  124.             query.prepare("update students set score=:score where class=:class");
  125.             query.bindValue(":score", info2.toInt());
  126.             query.bindValue(":class", info1);
  127.             if(query.exec())
  128.                 qDebug()<<info1<<" class更新成功";
  129.             else
  130.                 qDebug()<<query.lastError().text();
  131.         }
  132.         if(ui->comboBox_3->currentIndex() == 2)//class
  133.         {
  134.             query.prepare("update students set class=:class where class=:class1");
  135.             query.bindValue(":class", info2);
  136.             query.bindValue(":class1", info1);
  137.             if(query.exec())
  138.                 qDebug()<<info1<<" class更新成功";
  139.             else
  140.                 qDebug()<<query.lastError().text();
  141.         }
  142.     }
  143. }
复制代码
四、总体代码

        1、widget.cpp文件

  1. #include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent)    : QWidget(parent)    , ui(new Ui::Widget){    ui->setupUi(this);    ui->tabWidget->setTabText(0, "Select");    ui->tabWidget->setTabText(1, "Delete");    ui->pushButton->setText("查询数据库");    QStringList names;//创建学生名字信息表    names <<"小A" << "小B"<< "小C"<< "大D"<< "大E"<< "大F"<< "中G"<< "中H"<< "中I"<< "王J"<< "王K"<< "毛L"<< "毛M"<< "黄N"<< "黄O"<< "思P"<< "HQ"<< "GYUR";    QStringList clases;//创建学生班级信息表    clases <<"高一、一班"<<"高一、二班"<<"高一、三班"<<"高二、一班"<<"高二、二班"<<"高二、三班"<<"高三、一班"<<"高三、二班"<<"高三、三班";    //创建数据库    db = QSqlDatabase::addDatabase("QSQLITE");//创建SQLITE数据库,使用缺省毗连    //设置数据库文件名    db.setDatabaseName("MySqlit_db");    //打开数据库    if(!db.open())//打开失败        qDebug()<< db.lastError().text();//输出错误信息    else          //打开乐成    {        qDebug()<< "数据库打开乐成";        //数据库操作        //1、指定数据库毗连        QSqlQuery query(db);//毗连数据库db        query.exec("DROP TABLE students");//清空一下表students,防止数据库中有students表从而创建失败        //2、创建一个学生信息表        query.exec("CREATE TABLE students("                   "id INTEGER PRIMARY KEY AUTOINCREMENT,"                   "name VARCHAR(40) NOT NULL,"                   "score INTEGER NOT NULL,"                   "class VARCHAR(40) NOT NULL)");        qDebug()<< "创建学生信息表乐成(id,name,score,class)";        //3、为每一列标题添加绑定值        query.prepare("INSERT INTO students (name, score, class)"                      "VALUES (:name, :score, :class)");        //4、插入对应数据        foreach (QString name, names) {            query.bindValue(":name", name);//向绑定值中到场名字            query.bindValue(":score", rand()%101);//随机获取0~101的值传入结果中            query.bindValue(":class", clases[rand()%8]);//随机获取班级,并传入绑定值中            //5、将对应数据到场数据库            query.exec();//执行绑定的操作        }    }    //设置控件QTableWidget属性    ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); // 禁止编辑单位格内容}Widget::~Widget(){    delete ui;}//点击按钮查询数据库并表现查询到的所有信息void Widget::on_pushButton_clicked(){    QSqlQuery query(db);    if(!query.exec("SELECT * FROM students"))//如果查询失败    {        qDebug()<<"查询学生信息表失败  "<<db.lastError().text();    }    else//查询乐成    {        if(query.next())        {            int num = 0;            //初始化tableWidget控件            ui->tableWidget->setColumnCount(4);//设置控件为4列            ui->tableWidget->setHorizontalHeaderLabels(QStringList() << "id" << "name" << "score" << "class");            do            {                //存储数据                QString id = query.value(0).toString();                QString name = query.value(1).toString();                QString score = query.value(2).toString();                QString class1 = query.value(3).toString();                QTableWidgetItem *item0 = new QTableWidgetItem(id);                QTableWidgetItem *item1 = new QTableWidgetItem(name);                QTableWidgetItem *item2 = new QTableWidgetItem(score);                QTableWidgetItem *item3 = new QTableWidgetItem(class1);                // 设置数据内容居中对齐                item0->setTextAlignment(Qt::AlignCenter);                item1->setTextAlignment(Qt::AlignCenter);                item2->setTextAlignment(Qt::AlignCenter);                item3->setTextAlignment(Qt::AlignCenter);                ui->tableWidget->setRowCount(num+1);//设置对应行数                //加载数据到控件中表现                ui->tableWidget->setItem(num, 0, item0);                ui->tableWidget->setItem(num, 1, item1);                ui->tableWidget->setItem(num, 2, item2);                ui->tableWidget->setItem(num, 3, item3);                num++;            }while(query.next());        }        else//未查询到数据        {            ui->tableWidget->clear();            ui->tableWidget->setColumnCount(4);//设置控件为4列            ui->tableWidget->setHorizontalHeaderLabels(QStringList() << "id" << "name" << "score" << "class");            QMessageBox mesbox;            mesbox.setText("数据库内无内容");            mesbox.exec();        }    }}//查询符合条件的项目
  2. void Widget::on_pushButton_2_clicked()
  3. {
  4.     if(ui->lineEdit->text().isEmpty())
  5.     {
  6.         QMessageBox mesbox;
  7.         mesbox.setText("请输入内容!!!");
  8.         mesbox.exec();
  9.     }
  10.     else
  11.     {
  12.         QString info = ui->lineEdit->text();
  13.         QSqlQuery query;
  14.         if(ui->comboBox->currentIndex() == 0)
  15.         {
  16.             query.prepare("select * from students where name=:info");
  17.             query.bindValue(":info", info);
  18.             if(query.exec())
  19.             {
  20.                 int num = 0;
  21.                 //初始化tableWidget控件
  22.                 ui->tableWidget->setColumnCount(4);//设置控件为4列
  23.                 ui->tableWidget->setHorizontalHeaderLabels(QStringList() << "id" << "name" << "score" << "class");
  24.                 while(query.next())
  25.                 {
  26.                     //存储数据
  27.                     QString id = query.value(0).toString();
  28.                     QString name = query.value(1).toString();
  29.                     QString score = query.value(2).toString();
  30.                     QString class1 = query.value(3).toString();
  31.                     QTableWidgetItem *item0 = new QTableWidgetItem(id);
  32.                     QTableWidgetItem *item1 = new QTableWidgetItem(name);
  33.                     QTableWidgetItem *item2 = new QTableWidgetItem(score);
  34.                     QTableWidgetItem *item3 = new QTableWidgetItem(class1);
  35.                     // 设置数据内容居中对齐
  36.                     item0->setTextAlignment(Qt::AlignCenter);
  37.                     item1->setTextAlignment(Qt::AlignCenter);
  38.                     item2->setTextAlignment(Qt::AlignCenter);
  39.                     item3->setTextAlignment(Qt::AlignCenter);
  40.                     ui->tableWidget->setRowCount(num+1);//设置对应行数
  41.                     //加载数据到控件中显示
  42.                     ui->tableWidget->setItem(num, 0, item0);
  43.                     ui->tableWidget->setItem(num, 1, item1);
  44.                     ui->tableWidget->setItem(num, 2, item2);
  45.                     ui->tableWidget->setItem(num, 3, item3);
  46.                     num++;
  47.                 }
  48.             }
  49.             else
  50.             {
  51.                 qDebug()<<query.lastError().text();
  52.             }
  53.         }
  54.         if(ui->comboBox->currentIndex() == 1)
  55.         {
  56.             query.prepare("select * from students where class=:info");
  57.             query.bindValue(":info", info);
  58.             if(query.exec())
  59.             {
  60.                 int num = 0;
  61.                 //初始化tableWidget控件
  62.                 ui->tableWidget->setColumnCount(4);//设置控件为4列
  63.                 ui->tableWidget->setHorizontalHeaderLabels(QStringList() << "id" << "name" << "score" << "class");
  64.                 while(query.next())
  65.                 {
  66.                     //存储数据
  67.                     QString id = query.value(0).toString();
  68.                     QString name = query.value(1).toString();
  69.                     QString score = query.value(2).toString();
  70.                     QString class1 = query.value(3).toString();
  71.                     QTableWidgetItem *item0 = new QTableWidgetItem(id);
  72.                     QTableWidgetItem *item1 = new QTableWidgetItem(name);
  73.                     QTableWidgetItem *item2 = new QTableWidgetItem(score);
  74.                     QTableWidgetItem *item3 = new QTableWidgetItem(class1);
  75.                     // 设置数据内容居中对齐
  76.                     item0->setTextAlignment(Qt::AlignCenter);
  77.                     item1->setTextAlignment(Qt::AlignCenter);
  78.                     item2->setTextAlignment(Qt::AlignCenter);
  79.                     item3->setTextAlignment(Qt::AlignCenter);
  80.                     ui->tableWidget->setRowCount(num+1);//设置对应行数
  81.                     //加载数据到控件中显示
  82.                     ui->tableWidget->setItem(num, 0, item0);
  83.                     ui->tableWidget->setItem(num, 1, item1);
  84.                     ui->tableWidget->setItem(num, 2, item2);
  85.                     ui->tableWidget->setItem(num, 3, item3);
  86.                     num++;
  87.                 }
  88.             }
  89.             else
  90.             {
  91.                 qDebug()<<query.lastError().text();
  92.             }
  93.         }
  94.         if(ui->comboBox->currentIndex() == 2)
  95.         {
  96.             query.prepare("select * from students where score=:info");
  97.             query.bindValue(":info", info);
  98.             if(query.exec())
  99.             {
  100.                 int num = 0;
  101.                 //初始化tableWidget控件
  102.                 ui->tableWidget->setColumnCount(4);//设置控件为4列
  103.                 ui->tableWidget->setHorizontalHeaderLabels(QStringList() << "id" << "name" << "score" << "class");
  104.                 while(query.next())
  105.                 {
  106.                     //存储数据
  107.                     QString id = query.value(0).toString();
  108.                     QString name = query.value(1).toString();
  109.                     QString score = query.value(2).toString();
  110.                     QString class1 = query.value(3).toString();
  111.                     QTableWidgetItem *item0 = new QTableWidgetItem(id);
  112.                     QTableWidgetItem *item1 = new QTableWidgetItem(name);
  113.                     QTableWidgetItem *item2 = new QTableWidgetItem(score);
  114.                     QTableWidgetItem *item3 = new QTableWidgetItem(class1);
  115.                     // 设置数据内容居中对齐
  116.                     item0->setTextAlignment(Qt::AlignCenter);
  117.                     item1->setTextAlignment(Qt::AlignCenter);
  118.                     item2->setTextAlignment(Qt::AlignCenter);
  119.                     item3->setTextAlignment(Qt::AlignCenter);
  120.                     ui->tableWidget->setRowCount(num+1);//设置对应行数
  121.                     //加载数据到控件中显示
  122.                     ui->tableWidget->setItem(num, 0, item0);
  123.                     ui->tableWidget->setItem(num, 1, item1);
  124.                     ui->tableWidget->setItem(num, 2, item2);
  125.                     ui->tableWidget->setItem(num, 3, item3);
  126.                     num++;
  127.                 }
  128.             }
  129.             else
  130.             {
  131.                 qDebug()<<query.lastError().text();
  132.             }
  133.         }
  134.     }
  135. }//删除特定项void Widget::on_pushButton_3_clicked(){    if(ui->lineEdit->text().isEmpty())    {        QMessageBox mesbox;        mesbox.setText("请输入内容!!!");        mesbox.exec();    }    else    {        QString info = ui->lineEdit->text();        QSqlQuery query;        if(ui->comboBox->currentIndex() == 0)        {            query.prepare("delete from students where name=:info");            query.bindValue(":info", info);            if(query.exec())            {                qDebug()<<"删除乐成项目name = "<<info;            }            else            {                qDebug()<<query.lastError().text();            }        }        if(ui->comboBox->currentIndex() == 1)        {            query.prepare("delete from students where class=:info");            query.bindValue(":info", info);            if(query.exec())            {                 qDebug()<<"删除乐成项目 class = "<<info;            }            else            {                qDebug()<<query.lastError().text();            }        }        if(ui->comboBox->currentIndex() == 2)        {            query.prepare("delete from students where score=:info");            query.bindValue(":info", info);            if(query.exec())            {                 qDebug()<<"删除乐成项目 score = "<<info;            }            else            {                qDebug()<<query.lastError().text();            }        }    }}//删除所有数据
  136. void Widget::on_pushButton_4_clicked()
  137. {
  138.     QSqlQuery query(db);
  139.     if(!query.exec("delete FROM students"))//如果删除失败
  140.         qDebug()<<"删除所有学生信息失败  "<<db.lastError().text();
  141.     else//删除成功
  142.     {
  143.         QMessageBox mybox;
  144.         mybox.setText("删除成功,请重新查询数据库查看");
  145.         mybox.exec();
  146.     }
  147. }//插入数据
  148. void Widget::on_pushButton_5_clicked()
  149. {
  150.     QSqlQuery query(db);
  151.     QString str = "INSERT INTO students VALUES(:id, :name, :score,  :class)";
  152.     query.prepare(str);
  153.     query.bindValue(":id", ui->le_id->text().toInt());
  154.     query.bindValue(":name", ui->le_name->text());
  155.     query.bindValue(":score", ui->le_score->text().toInt());
  156.     query.bindValue(":class", ui->le_class->text());
  157.     if(query.exec())
  158.         qDebug()<<"数据插入成功";
  159.     else
  160.         qDebug()<<query.lastError().text();
  161. }
  162. //更新数据
  163. void Widget::on_pushButton_6_clicked()
  164. {
  165.     QString info1 = ui->le_updata_1->text();
  166.     QString info2 = ui->le_updata_2->text();
  167.     QSqlQuery query(db);
  168.     //根据id去更新
  169.     if(ui->comboBox_2->currentIndex() == 0)//id
  170.     {
  171.         if(ui->comboBox_3->currentIndex() == 0)//name
  172.         {
  173.             query.prepare("update students set name=:name where id=:id1");
  174.             query.bindValue(":name", info2);
  175.             query.bindValue(":id1", info1.toInt());
  176.             if(query.exec())
  177.                 qDebug()<<info1<<" name更新成功";
  178.             else
  179.                 qDebug()<<query.lastError().text();
  180.         }
  181.         if(ui->comboBox_3->currentIndex() == 1)//score
  182.         {
  183.             query.prepare("update students set score=:score where id=:id1");
  184.             query.bindValue(":score", info2.toInt());
  185.             query.bindValue(":id1", info1.toInt());
  186.             if(query.exec())
  187.                 qDebug()<<info1<<" score更新成功";
  188.             else
  189.                 qDebug()<<query.lastError().text();
  190.         }
  191.         if(ui->comboBox_3->currentIndex() == 2)//class
  192.         {
  193.             query.prepare("update students set class=:class where id=:id1");
  194.             query.bindValue(":class", info2);
  195.             query.bindValue(":id1", info1.toInt());
  196.             if(query.exec())
  197.                 qDebug()<<info1<<" class更新成功";
  198.             else
  199.                 qDebug()<<query.lastError().text();
  200.         }
  201.     }
  202.     //根据name去更新
  203.     if(ui->comboBox_2->currentIndex() == 1)//name
  204.     {
  205.         if(ui->comboBox_3->currentIndex() == 0)//name
  206.         {
  207.             query.prepare("update students set name=:name where name=:name1");
  208.             query.bindValue(":name", info2);
  209.             query.bindValue(":name1", info1);
  210.             if(query.exec())
  211.                 qDebug()<<info1<<" name更新成功";
  212.             else
  213.                 qDebug()<<query.lastError().text();
  214.         }
  215.         if(ui->comboBox_3->currentIndex() == 1)//score
  216.         {
  217.             query.prepare("update students set score=:score where name=:name");
  218.             query.bindValue(":score", info2.toInt());
  219.             query.bindValue(":name", info1);
  220.             if(query.exec())
  221.                 qDebug()<<info1<<" score更新成功";
  222.             else
  223.                 qDebug()<<query.lastError().text();
  224.         }
  225.         if(ui->comboBox_3->currentIndex() == 2)//class
  226.         {
  227.             query.prepare("update students set class=:class where name=:name");
  228.             query.bindValue(":class", info2);
  229.             query.bindValue(":name", info1);
  230.             if(query.exec())
  231.                 qDebug()<<info1<<" class更新成功";
  232.             else
  233.                 qDebug()<<query.lastError().text();
  234.         }
  235.     }
  236.     //根据score去更新
  237.     if(ui->comboBox_2->currentIndex() == 2)//score
  238.     {
  239.         if(ui->comboBox_3->currentIndex() == 0)//name
  240.         {
  241.             query.prepare("update students set name=:name where score=:score");
  242.             query.bindValue(":name", info2);
  243.             query.bindValue(":score", info1.toInt());
  244.             if(query.exec())
  245.                 qDebug()<<info1<<" name更新成功";
  246.             else
  247.                 qDebug()<<query.lastError().text();
  248.         }
  249.         if(ui->comboBox_3->currentIndex() == 1)//score
  250.         {
  251.             query.prepare("update students set score=:score where score=:score1");
  252.             query.bindValue(":score", info2.toInt());
  253.             query.bindValue(":score1", info1.toInt());
  254.             if(query.exec())
  255.                 qDebug()<<info1<<" score更新成功";
  256.             else
  257.                 qDebug()<<query.lastError().text();
  258.         }
  259.         if(ui->comboBox_3->currentIndex() == 2)//class
  260.         {
  261.             query.prepare("update students set class=:class where score=:score");
  262.             query.bindValue(":class", info2);
  263.             query.bindValue(":score", info1.toInt());
  264.             if(query.exec())
  265.                 qDebug()<<info1<<" class更新成功";
  266.             else
  267.                 qDebug()<<query.lastError().text();
  268.         }
  269.     }
  270.     //根据class去更新
  271.     if(ui->comboBox_2->currentIndex() == 3)//class
  272.     {
  273.         if(ui->comboBox_3->currentIndex() == 0)//name
  274.         {
  275.             query.prepare("update students set name=:name where calss=:class");
  276.             query.bindValue(":name", info2);
  277.             query.bindValue(":class", info1);
  278.             if(query.exec())
  279.                 qDebug()<<info1<<" class更新成功";
  280.             else
  281.                 qDebug()<<query.lastError().text();
  282.         }
  283.         if(ui->comboBox_3->currentIndex() == 1)//score
  284.         {
  285.             query.prepare("update students set score=:score where class=:class");
  286.             query.bindValue(":score", info2.toInt());
  287.             query.bindValue(":class", info1);
  288.             if(query.exec())
  289.                 qDebug()<<info1<<" class更新成功";
  290.             else
  291.                 qDebug()<<query.lastError().text();
  292.         }
  293.         if(ui->comboBox_3->currentIndex() == 2)//class
  294.         {
  295.             query.prepare("update students set class=:class where class=:class1");
  296.             query.bindValue(":class", info2);
  297.             query.bindValue(":class1", info1);
  298.             if(query.exec())
  299.                 qDebug()<<info1<<" class更新成功";
  300.             else
  301.                 qDebug()<<query.lastError().text();
  302.         }
  303.     }
  304. }
复制代码
2、widget.h文件

  1. #ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QtSql/QSqlDatabase>
  2. #include <QtSql/QSqlError>
  3. #include <QtSql/QSqlQuery>
  4. #include <QDebug>#include <QMessageBox>QT_BEGIN_NAMESPACEnamespace Ui {class Widget;}QT_END_NAMESPACEclass Widget : public QWidget{    Q_OBJECTpublic:    Widget(QWidget *parent = nullptr);    ~Widget();private slots:    void on_pushButton_clicked();    void on_pushButton_2_clicked();    void on_pushButton_3_clicked();    void on_pushButton_4_clicked();    void on_pushButton_5_clicked();    void on_pushButton_6_clicked();private:    Ui::Widget *ui;    QSqlDatabase db;//数据库对象};#endif // WIDGET_H
复制代码
3、main.cpp文件

  1. #include "widget.h"
  2. #include <QApplication>
  3. int main(int argc, char *argv[])
  4. {
  5.     QApplication a(argc, argv);
  6.     Widget w;
  7.     w.show();
  8.     return a.exec();
  9. }
复制代码
4、.pro文件

  1. QT       += core gui
  2. QT += sql
  3. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
  4. CONFIG += c++17
  5. # You can make your code fail to compile if it uses deprecated APIs.
  6. # In order to do so, uncomment the following line.
  7. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
  8. SOURCES += \
  9.     main.cpp \
  10.     widget.cpp
  11. HEADERS += \
  12.     widget.h
  13. FORMS += \
  14.     widget.ui
  15. # Default rules for deployment.
  16. qnx: target.path = /tmp/$${TARGET}/bin
  17. else: unix:!android: target.path = /opt/$${TARGET}/bin
  18. !isEmpty(target.path): INSTALLS += target
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

温锦文欧普厨电及净水器总代理

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表