QT开发中文网

在qt框架下使用c++编写sqlite数据库多字段查询的功能,且查询的结果返回显示在一个table view控件中

以下是一个使用Qt框架和C++编写的SQLite数据库多字段查询,结果在Table View控件中显示的示例代码:

首先需要在项目文件中包含sqlite3.h头文件,并链接libsqlite3.a库文件。

#include <QSqlTableModel>
#include <QTableView>
#include <QVBoxLayout>
#include <QPushButton>
#include "sqlite3.h"

void queryDatabase(QSqlTableModel *model, QString name, int age, QString address) {
    // 打开数据库连接
    sqlite3 *db;
    int rc = sqlite3_open("test.db", &db);
    if (rc != SQLITE_OK) {
        printf("Cannot open database: %s\n", sqlite3_errmsg(db));
        return;
    }

    // 构造SQL语句
    QString sql = "SELECT * FROM person WHERE 1=1";
    if (!name.isEmpty()) {
        sql += QString(" AND name='%1'").arg(name);
    }
    if (age != -1) {
        sql += QString(" AND age=%1").arg(age);
    }
    if (!address.isEmpty()) {
        sql += QString(" AND address LIKE '%%%1%%'").arg(address);
    }

    // 查询数据库并将结果存入model中
    model->setTable("person");
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    model->select();
    model->setQuery(sql);

    // 关闭数据库连接
    sqlite3_close(db);
}

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建主窗口
    QWidget *mainWidget = new QWidget;
    QVBoxLayout *layout = new QVBoxLayout(mainWidget);

    // 创建查询条件输入框和按钮
    QLineEdit *nameLineEdit = new QLineEdit;
    QSpinBox *ageSpinBox = new QSpinBox;
    ageSpinBox->setMinimum(0);
    ageSpinBox->setMaximum(200);
    QLineEdit *addressLineEdit = new QLineEdit;
    QPushButton *queryButton = new QPushButton("查询");

    // 创建Table View控件和model
    QSqlTableModel *model = new QSqlTableModel;
    QTableView *tableView = new QTableView;
    tableView->setModel(model);

    // 将控件添加到布局中
    layout->addWidget(nameLineEdit);
    layout->addWidget(ageSpinBox);
    layout->addWidget(addressLineEdit);
    layout->addWidget(queryButton);
    layout->addWidget(tableView);

    // 点击查询按钮时执行查询操作
    QObject::connect(queryButton, &QPushButton::clicked, [=]() {
        QString name = nameLineEdit->text();
        int age = ageSpinBox->value();
        QString address = addressLineEdit->text();
        queryDatabase(model, name, age, address);
    });

    mainWidget->show();
    return app.exec();
}

在这个示例代码中,我们首先定义了一个queryDatabase函数来查询数据库并将结果存入model中。这个函数接受三个参数:name、age和address,它们分别对应数据库表中的三个字段。如果某个条件为空或为-1,则该条件不会作为查询条件。

然后我们创建了主窗口,并向其中添加了一个查询条件输入框、一个Table View控件和一个查询按钮。当用户点击查询按钮时,我们调用queryDatabase函数来执行查询操作,并将结果显示在Table View控件中。

需要注意的是,在使用Qt和SQLite进行开发时,我们可以通过QSqlTableModel来方便地对数据库进行操作,而无需直接使用原始的SQLite API。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=1149

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?