如需根据选择的项目名称查询相关信息并将结果显示在 QTableView
中,您可以按照以下步骤进行操作。我们将组合两个部分的代码,其中一个是实现 projectmanager
函数来初始化项目列表并填充 QComboBox
,另一个是实现查询所选项目信息的逻辑并将其填入 QTableView
中。
步骤概述:
- 填充
QComboBox
: 从数据库中获取项目名称并填充。 - 绑定
QComboBox
的信号: 当用户选择不同的项目时,查询该项目的详细信息。 - 查询项目详细信息: 根据选择的项目名称查询数据库。
- 将查询结果填充至
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
}
代码说明:
-
项目管理函数 (
projectmanager
):- 初始化数据库查询以填充
QComboBox
。 - 使用
connect
监视 ComboBox 的选项更改,并将信号连接到onProjectSelected
槽。
- 初始化数据库查询以填充
-
项目选择槽 (
onProjectSelected
):- 在选择项目后,查询数据库以获取该项目的详细信息。
- 使用
QStandardItemModel
填充QTableView
,设置列标题。 - 将数据库查询的结果添加到模型,并最终设置模型到
QTableView
。