morin526 2023-11-10 17:48 采纳率: 0%
浏览 151
已结题

Qt编程如何实现树状结构数据显示及更新(相关搜索:Qt)

请教各位,在QT软件编程,MySQL数据库环境中,如何实现下图预算套价的显示及汇总,其中标记为1的行为清单行,标记为2的行为定额行,标记为3的行为主材行,顺序是先添加清单行,后挂接定额行,最后挂接主材行,在MySQL数据库中单独设计为三张表,是一对多或一对一的关系,B列为单位,清单、定额、主材的单位可能不一致,需要在清单单价D汇总时进行换算,C列为数量,在添加定额或主材时自动根据单位换算添加。
主要是在QT中采用何种模型及视图显示,如何在软件中添加、修改后保存回MySQL数据库中。

img

  • 写回答

17条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-11-10 17:49
    关注
    获得6.00元问题酬金

    引自强大而免费的微信小程序:皆我百晓生

    在Qt中实现树状结构数据显示及更新可以使用QTreeView和QStandardItemModel配合使用。以下是一种可能的实现方法:

    1.创建一个QTreeView控件用于显示树状结构数据。

    QTreeView *treeView = new QTreeView(this);
    

    2.创建一个QStandardItemModel作为数据模型。

    QStandardItemModel *model = new QStandardItemModel(this);
    

    3.设置数据模型的列数和表头。

    model->setColumnCount(4); // 设置模型的列数
    model->setHeaderData(0, Qt::Horizontal, "编号"); // 设置表头
    model->setHeaderData(1, Qt::Horizontal, "名称");
    model->setHeaderData(2, Qt::Horizontal, "单位");
    model->setHeaderData(3, Qt::Horizontal, "单价");
    

    4.查询MySQL数据库中的数据,并添加到数据模型中。

    // 执行查询语句获取数据
    QString queryStr = "SELECT * FROM your_table";
    QSqlQuery query(queryStr);
    
    while (query.next()) {
        // 从查询结果中获取数据
        QString id = query.value(0).toString();
        QString name = query.value(1).toString();
        QString unit = query.value(2).toString();
        double price = query.value(3).toDouble();
    
        // 创建一个QStandardItem,并设置数据
        QStandardItem *item = new QStandardItem();
        item->setData(id, Qt::DisplayRole); // 设置编号
        item->setData(name, Qt::DisplayRole); // 设置名称
        item->setData(unit, Qt::DisplayRole); // 设置单位
        item->setData(price, Qt::DisplayRole); // 设置单价
    
        model->appendRow(item); // 将item添加到model中
    }
    

    5.将数据模型设置给QTreeView控件。

    treeView->setModel(model);
    

    6.在用户添加、修改、删除数据时,通过数据模型对数据库进行相应的操作。

    // 在添加行时,将数据添加到model中,并插入数据库中
    QStandardItem *item = new QStandardItem();
    item->setData(id, Qt::DisplayRole); // 设置编号
    item->setData(name, Qt::DisplayRole); // 设置名称
    item->setData(unit, Qt::DisplayRole); // 设置单位
    item->setData(price, Qt::DisplayRole); // 设置单价
    
    model->appendRow(item); // 将item添加到model中
    
    // 将数据插入到数据库中
    QString insertStr = "INSERT INTO your_table VALUES (?, ?, ?, ?)";
    QSqlQuery insertQuery;
    insertQuery.prepare(insertStr);
    insertQuery.addBindValue(id);
    insertQuery.addBindValue(name);
    insertQuery.addBindValue(unit);
    insertQuery.addBindValue(price);
    insertQuery.exec();
    
    // 在修改行时,更新model中的数据,并更新到数据库中
    item->setData(newName, Qt::DisplayRole); // 更新名称
    item->setData(newUnit, Qt::DisplayRole); // 更新单位
    item->setData(newPrice, Qt::DisplayRole); // 更新单价
    
    int row = item->row();
    model->setData(model->index(row, 1), newName); // 更新名称数据
    model->setData(model->index(row, 2), newUnit); // 更新单位数据
    model->setData(model->index(row, 3), newPrice); // 更新单价数据
    
    // 更新数据到数据库中
    QString updateStr = "UPDATE your_table SET name=?, unit=?, price=? WHERE id=?";
    QSqlQuery updateQuery;
    updateQuery.prepare(updateStr);
    updateQuery.addBindValue(newName);
    updateQuery.addBindValue(newUnit);
    updateQuery.addBindValue(newPrice);
    updateQuery.addBindValue(id);
    updateQuery.exec();
    
    // 在删除行时,从model中移除数据,并从数据库中删除
    model->removeRow(row); // 移除行数据
    
    // 从数据库中删除数据
    QString deleteStr = "DELETE FROM your_table WHERE id=?";
    QSqlQuery deleteQuery;
    deleteQuery.prepare(deleteStr);
    deleteQuery.addBindValue(id);
    deleteQuery.exec();
    

    通过以上代码,您可以在Qt中实现树状结构数据的显示和更新,并将修改后的数据保存回MySQL数据库中。其中,QTreeView用于显示数据,QStandardItemModel用于存储和更新数据。同时,根据您的需求,您还可以在添加和修改数据时进行单位的换算。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月18日
  • 创建了问题 11月10日