Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QSqlTableModel中的附加空行_C++_Sql_Qt_User Interface_Qsqltablemodel - Fatal编程技术网

C++ QSqlTableModel中的附加空行

C++ QSqlTableModel中的附加空行,c++,sql,qt,user-interface,qsqltablemodel,C++,Sql,Qt,User Interface,Qsqltablemodel,我试图添加始终为空的最后一行。现在我有了代理模型,我在其上调用insertRow()-该行被插入。但我需要在更新最后一行(插入数据)时添加另一行。我应该连接到哪个信号 有时会发生奇怪的错误-单击现有行时,数据会复制到最后一行。你知道会出什么问题吗 感谢您的帮助。您可能需要将插槽连接到QSqlTableModel::dataChanged(const QModelIndex&topLeft,const QModelIndex&bottomRight)信号。我已经尝试过了 有几个问题让我重新思考如何

我试图添加始终为空的最后一行。现在我有了代理模型,我在其上调用insertRow()-该行被插入。但我需要在更新最后一行(插入数据)时添加另一行。我应该连接到哪个信号

有时会发生奇怪的错误-单击现有行时,数据会复制到最后一行。你知道会出什么问题吗


感谢您的帮助。

您可能需要将插槽连接到
QSqlTableModel::dataChanged(const QModelIndex&topLeft,const QModelIndex&bottomRight)
信号。

我已经尝试过了

有几个问题让我重新思考如何实现这一点:

  • QSqlTableModel如何在内部处理缓冲区(d)指针 访问(即使在子类化时)是您看到奇怪事情的原因 将数据复制到最后一行

  • 无法区分表行数和基础模型行数。它们总是一样的,您必须使用一些标志来知道何时已经有了新行并且不想添加另一行(更改任何行时会发出dataChanged))。您必须连接至少4个信号才能更新这些标志:

     void   beforeDelete ( int row )
     void   beforeInsert ( QSqlRecord & record )
     void   beforeUpdate ( int row, QSqlRecord & record )
     void   primeInsert ( int row, QSqlRecord & record )
    
  • 如果您有多个列。您选择了哪种提交方式?(手动、onrowchange…等)根据这一点,您必须决定何时添加新的空行。(上次更改有错误吗?)

  • 不是不可能,而是丑陋

    模型和表格过于耦合,无法找到简单的解决方案。 我最终使用了表下的一个表单来添加新数据


    我会更好地重新实现您自己的模型和/或表,而不是使用Qt提供的那些来完成此操作。

    我使用该信号来计算代码,如下所示:
    如果(end.row()==this->rowCount()-1){qDebug()insertRow(end.row());}
    但是,当我在表上点击时,数据会被复制。