qstandmodel与数据库的交互

如需根据选择的项目名称查询相关信息并将结果显示在 QTableView 中,您可以按照以下步骤进行操作。我们将组合两个部分的代码,其中一个是实现 projectmanager 函数来初始化项目列表并填充 QComboBox,另一个是实现查询所选项目信息的逻辑并将其填入 QTableView 中。

步骤概述:

  1. 填充 QComboBox: 从数据库中获取项目名称并填充。
  2. 绑定 QComboBox 的信号: 当用户选择不同的项目时,查询该项目的详细信息。
  3. 查询项目详细信息: 根据选择的项目名称查询数据库。
  4. 将查询结果填充至 QTableView: 使用 QStandardItemModel 或其它 QAbstractTableModel 子类将结果显示在 QTableView 中。

示例代码

#include <QSqlQueryModel>
#include <QSqlQuery>
#include <QSqlError>
#include <QStandardItemModel>

// 将此函数添加到 MainWindow 类中。
void MainWindow::projectmanager()
{
    // 步骤1: 填充项目列表到 QComboBox
    QSqlQuery query;
    query.prepare("SELECT DISTINCT name FROM project_plan");

    if (!query.exec()) {
        qDebug() << "查询失败:" << query.lastError().text();
    } else {
        while (query.next()) {
            QString projectName = query.value(0).toString();
            ui->comboBoxproplan->addItem(projectName); // 添加项目名字到 ComboBox
        }
    }

    // 步骤2: 监视 QComboBox 的选择信号
    connect(ui->comboBoxproplan, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &MainWindow::onProjectSelected);
}

// 选择项目后,查询并填充 QTableView
void MainWindow::onProjectSelected(int index)
{
    if (index < 0) return; // 检查索引有效性

    QString projectName = ui->comboBoxproplan->itemText(index); // 获取选中的项目名称

    // 步骤3: 查询选中项目的详细信息
    QSqlQuery query;
    query.prepare("SELECT * FROM project_plan WHERE name = :name");
    query.bindValue(":name", projectName);

    if (!query.exec()) {
        qDebug() << "查询失败:" << query.lastError().text();
        return;
    }

    // 步骤4: 用 QStandardItemModel 填充 QTableView
    QStandardItemModel *model = new QStandardItemModel();
    model->setHorizontalHeaderLabels({"项目名称", "阶段", "完成计划", "负责人", "部门", "完成格式", "计划完成日期", "实际完成日期", "状态", "优先级", "风险评估", "反馈"});

    int row = 0;
    while (query.next()) {
        model->insertRow(row);
        for (int column = 0; column < model->columnCount(); ++column) {
            model->setItem(row, column, new QStandardItem(query.value(column).toString()));
        }
        row++;
    }

    ui->tableView->setModel(model); // 将模型设置到 QTableView
}

代码说明:

  1. 项目管理函数 (projectmanager):

    • 初始化数据库查询以填充 QComboBox
    • 使用 connect 监视 ComboBox 的选项更改,并将信号连接到 onProjectSelected 槽。
  2. 项目选择槽 (onProjectSelected):

    • 在选择项目后,查询数据库以获取该项目的详细信息。
    • 使用 QStandardItemModel 填充 QTableView,设置列标题。
    • 将数据库查询的结果添加到模型,并最终设置模型到 QTableView

注意事项:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值