QT + SQL 实现对 combo box下拉选项进行增、删、改、查

1. 实现的效果

没有使用外部导入时,
从数据库导入前

执行效果
外部功能数据库如下:

idnamerulenotes
1外部规则1( 3 * x + 2 * y ) / 5加权平均
2外部规则2sqrt( x * x + y * y )平方和

导入到下拉菜单
从数据库导入后

2. 导入的功能数据库的代码

//导入功能数据库按钮
void Widget::on_pushButton_2_clicked()
{
    //ui->comboBox->addItem("外部功能1");
    //ui->comboBox->addItem("外部功能2");
    //读取外部规则表,并写入下拉菜单name
    QSqlQuery query(db);
    QString sql=QString("select * from rules;");
    query.exec(sql);
    while(query.next())
    {
       //把 rule 表中的 name 载入到下拉框
       QString rule_name=QString("%1").arg(query.value("name").toString());
       ui->comboBox->addItem(rule_name);
    }
}

3. 实现外部功能的办法

1. 根据表单自动生成代码。格式如下:
//注释:[notes]
float rules_[id](float x,float y){return [rule];}

生成的完整 rule.c 代码如下:

/****************************************/
//编译此代码为 rules .dll,然后复制.exe目录下,以更新功能
//更新时间:2020年-03月-24日 18时-47分-26秒
/****************************************/
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
#include <math.h>

/****************************************/
//函数名:外部功能1
//注释:加权平均
/****************************************/
float DLL_EXPORT rule_1(float x,float y){return (3*x+2*y)/5;}

/****************************************/
//函数名:外部功能2
//注释:平方和
/****************************************/
float DLL_EXPORT rule_2(float x,float y){return sqrt(x*x+y*y);}
2. rule.c 编译成为动态链接库。

编写批处理脚本,实现自动代码编译。

echo 正在执行 rule.c 的编译....
cd [rule.c文件所在路径]
echo 转到当前目录
gcc -shared -o rule.dll rule.c
echo 编译 rule.c 为 dll 文件...
echo 执行完毕...

新建记事本,写入此脚本,命名为 自动编译.bat
于是,双击这个文件,即可实现自动编译,得到外部功能表的动态链接库。
也可以从QT程序中调用此脚本,实现自动编译。代码如下:

//规则代码编译成动态链接库
void Widget::on_pushButton_2_clicked()
{
    qDebug("规则代码编译成动态链接库");
    //调用外部脚本,编译代码
    QProcess p(NULL);
    p.setWorkingDirectory("C:/Users/22672/Desktop");
    QString command = "C:/Users/22672/Desktop/自动编译.bat";
    p.start(command);
    p.waitForFinished();
    qDebug("规则代码编译成功!");
}
3. 根据下拉选项,得到外部功能的 name,查询 rules 数据库,得到 id,然后构造函数名字为 rule_[id],显示加载动态链接库。进行计算,得到结果。

代码如下:

//则查找规则名称 name,构造函数名 rule_id
QString sql=QString("select * from rules where name='%1';").arg(item);
QSqlQuery query(db);
query.exec(sql);
query.next();
QString str_temp = QString("rule_%1").arg(query.value("id").toInt());
// outside_rule_function 要转换为 char* 否则 resolve 不认
QByteArray str_temp2 = str_temp.toUtf8();
char* outside_rule_function = str_temp2.data();

//加载链接库 rules.dll
QLibrary lib("rule.dll");//rules.dll 放在 xxx.exe文件夹下
if(lib.load()==true)
{
   typedef float(*rule_function)(float x,float y);//定义函数
   if(query.value("id").toInt()!=0)//查找成功时
   {
       rule_function outside_rule=(rule_function)lib.resolve(outside_rule_function);
       ans =  outside_rule(x,y);
    }

总结:

  1. 外部功能数据库。增、删、改、查,自动生成对应的代码,自动调用批处理脚本编译此代码,得到动态链接库。
  2. 主程序。根据外部功能数据库,查表加载下拉选项。
  3. 主程序。根据下拉选项,查表构造函数名,动态加载动态链接库,运行指定的功能。
  4. 关键技术:dll 动态加载外部功能数据库批处理编译程序
  5. 整个架构如下。
    在这里插入图片描述
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt提供了一套功能强大的数据库模块用于对数据进行操作。通过Qt的数据库模块,我们可以方便地连接和操作各种类型的数据库,如MySQLSQLite、Oracle等。 在Qt中,我们首先需要使用QSqlDatabase类来创建数据库连接。可以通过给定数据库类型、主机名、端口号、数据库名称、用户名和密码等信息来获取一个数据库连接对象。 接下来,我们需要使用QSqlQuery类来执行数据库操作语句,如加(插入)、除、修改(更新)和询操作。QSqlQuery除了可以执行SQL语句,还可以获取询结果集等操作。通过调用exec()函数可以执行SQL语句,并通过lastError()函数可以获取执行过程中的错误信息。 对于加操作,我们可以使用INSERT INTO语句将数据插入到数据库表中。可以通过setValuse()函数来绑定参数的,然后通过调用exec()函数执行INSERT语句。 对于除操作,我们可以使用DELETE FROM语句来除数据库表中的数据。可以通过WHERE子句来指定除条件,通过调用exec()函数执行DELETE语句。 对于修改操作,我们可以使用UPDATE语句来更新数据库表中的数据。可以通过SET子句来设置更新的字段和,通过WHERE子句来指定更新条件。同样,通过调用exec()函数执行UPDATE语句。 对于询操作,我们可以使用SELECT语句来从数据库表中检索数据。通过调用exec()函数执行SELECT语句后,可以通过next()函数依次访问询结果集,并通过value()函数获取相应字段的。 除了以上常用的操作,Qt还提供了各种其他数据库操作函数和类,如事务处理、预处理语句等,以满足不同需求。在操作完数据库后,我们需要关闭数据库连接,通过调用close()函数实现。 总之,Qt数据库模块提供了简单易用的接口,使得我们可以方便地对数据进行操作,有效地管理和操作数据库。 ### 回答2: Qt是一款跨平台的开源C++开发框架,提供了丰富的数据库操作功能,可以方便地对数据进行操作。 首先,连接数据库。使用Qt提供的QSqlDatabase类,可以连接多种类型的数据库,如MySQLSQLite等。通过设置数据库的连接参数,如主机名、用户名、密码等,可以连接到数据库服务器。 接下来,进行数据的加。通过执行SQL INSERT语句,可以将新的记录插入到数据库表中。首先,创建QSqlQuery对象,然后调用exec()方法执行INSERT语句,即可将数据插入到数据库中。 然后,进行数据的询。使用SELECT语句可以从数据库中检索出所需的数据。同样,通过创建QSqlQuery对象,调用exec()方法执行SELECT语句,可以获取询结果。通过遍历结果集,可以获取到每一条记录的数据。 进行数据的修改。使用UPDATE语句可以修改数据库中的记录。同样,通过创建QSqlQuery对象,调用exec()方法执行UPDATE语句,即可对数据库进行修改。 最后,进行数据的除。使用DELETE语句可以从数据库中除记录。同样,通过创建QSqlQuery对象,调用exec()方法执行DELETE语句,即可除数据库中的数据。 总之,Qt提供了方便易用的数据库操作功能,可以通过简单的代码实现数据的。开发者只需了解基本的SQL语句和Qt的数据库操作接口,就可以轻松处理各种数据库操作需求。 ### 回答3: Qt是一个强大的跨平台开发框架,它提供了Qt Sql模块,用于对数据库进行操作。 1. 加数据:可以通过Qt提供的QSqlQuery类来执行SQL语句实现数据的插入操作。首先,创建一个QSqlQuery对象,然后使用exec()方法执行插入数据的SQL语句。 2. 除数据:同样可以使用QSqlQuery类来执行SQL语句实现数据的除操作。创建QSqlQuery对象,然后使用exec()方法执行除数据的SQL语句。 3. 修改数据:通过QSqlQuery类,可以执行SQL语句实现数据的修改操作。创建一个QSqlQuery对象,然后使用exec()方法执行修改数据的SQL语句。 4. 询数据:Qt提供了QSqlQuery类来执行SQL语句实现数据的询操作。首先,创建一个QSqlQuery对象,然后使用exec()方法执行询数据的SQL语句。可以通过next()方法迭代获取询结果集中的各条数据,并可以通过value()方法获取具体的字段。 在进行数据库操作前,需要先建立数据库连接。Qt提供了QSqlDatabase类来管理数据库连接,可以使用addDatabase()方法创建一个数据库连接对象,然后使用setHostName()、setDatabaseName()、setUserName()、setPassword()等方法设置连接信息,最后使用open()方法打开数据库连接。 同样,数据的操作完成后,需要及时关闭数据库连接,以释放资源。可以使用QSqlDatabase类的close()方法关闭数据库连接。 总结:Qt提供了丰富的类和方法,用于对数据库进行操作。开发者可以根据具体的需求,利用Qt的数据库模块灵活地操作数据库,实现各种数据处理功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值