关于#qt#的问题,请各位专家解答!(相关搜索:数据库)

//下面这段代码,要用m_model->submitAll()才能保存,用m_model->submit()不能保存到数据库。请问是哪里出了问题?


    const int currentrow = tableview->currentIndex().row();//所在的行号
    if(currentrow >= 0)
    {
        QFont font = QFont("Microsoft YaHei",12,2);
        ui->textEdit_pingzhu->setFont(font);
        ui->textEdit_pingzhu->setAlignment(Qt::AlignJustify);
        m_model->setData(m_model->index(currentrow,7),ui->textEdit_pingzhu->toPlainText());
        m_model->submitAll();
        //m_model->submit();
        //重新选择该行,要刷新fetch()到该行,才能定位到此行。
        while (m_model->rowCount() < currentrow) {
            m_model->fetchMore();
        }
        tableview->setSelectionBehavior(QAbstractItemView::SelectRows);
        tableview->setCurrentIndex(tableview->model()->index(currentrow,0));
        return;
    }
    else{
;//省略
    }

可参考 https://blog.csdn.net/luolaihua2018/article/details/111801252 中submit和submitall的函数解释

看起来你的代码基本上是正确的,m_model->submitAll() 是用于提交所有待保存的更改到数据库的操作。然而,m_model->submit() 通常只提交当前挂起的更改,而不是所有的更改。所以,如果你使用了 m_model->setData 多次,或者对多行数据进行了修改,最好使用 m_model->submitAll() 来确保所有的更改都被提交到数据库

问题分析:
1、submit函数用于提交当前处于编辑状态的记录的更改。如修改的某条记录,某个字段值等。
2、submitAll函数则用于提交所有处于编辑状态的记录的更改。如对多条记录进行了修改,则将所有的修改保存到数据库中。

【相关推荐】



  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/250003
  • 这篇博客也不错, 你可以看下关于QT编译后出现各种莫名其妙错误的解决办法
  • 您还可以看一下 安晓辉老师的Qt项目实战之网络电子白板课程中的 客户端实现加入会议功能小节, 巩固相关知识点
  • 除此之外, 这篇博客: 【翻译】Qt模型视图框架介绍(长文)中的 3.2、模型索引 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    为了确保数据的表示与其访问方式保持分离,引入了模型索引的概念。可以通过模型获得的每条信息都由模型索引表示。视图和委托使用这些索引来请求要显示的数据项。

    模型索引对象包含一个指向创建它们的模型的指针,这可以防止在处理多个模型时出现混淆。

     QAbstractItemModel *model = index.model();

    模型索引提供对数据片段的临时引用,可用于通过模型检索或修改数据。 由于模型可能会不时重新组织其内部结构,因此模型索引可能会失效,不应存储。

    如果需要对一条信息进行长期引用,则必须创建一个持久模型索引。这提供了对模型保持最新的信息的参考。

    临时模型索引由 QModelIndex 类提供,持久模型索引由 QPersistentModelIndex 类提供。

    要获得与数据项对应的模型索引,必须为模型指定三个属性:行号、列号、父项的模型索引。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^