• 2998阅读
  • 3回复

[提问]请问QDataWidgetMapper能不能用于插入数据? [复制链接]

上一主题 下一主题
离线hzymlx
 

只看楼主 倒序阅读 楼主  发表于: 2013-03-30
请问QDataWidgetMapper能不能用于插入数据,不是修改数据。为什么只能更新数据不能插入数据,哪个地方写的不对,请指教。

dataMapper = new QDataWidgetMapper(this);
    QSqlDatabase sqlite = QSqlDatabase::database("sqlite");
    tableModel = new QSqlTableModel(this,sqlite);
 //   tableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
    tableModel->setTable("database_info");
    tableModel->select();
    dataMapper->setModel( tableModel );
    dataMapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
    dataMapper->addMapping(m_editId,DBINFO_ID);
    dataMapper->addMapping(m_editIpAddress,DBINFO_IPADDR);
    dataMapper->addMapping(m_editPort,DBINFO_PORT);
    dataMapper->addMapping(m_editDBName,DBINFO_DB);
    dataMapper->addMapping(m_editUserName,DBINFO_USER);
    dataMapper->addMapping(m_editPassword,DBINFO_PWD);
    if( tableModel->rowCount() == 0 )
    {




        bool ok = tableModel->insertRows(1,1);
        qDebug() <<  ok;
        dataMapper->setCurrentIndex(1);
        m_editIpAddress->setFocus();
    }
    else
      dataMapper->toFirst();
等等等
离线hzymlx

只看该作者 1楼 发表于: 2013-03-30
提交语句
if( !dataMapper->submit())
    {
        qDebug() << "type ="<<tableModel->lastError().type();
    }
等等等
离线hehuim

只看该作者 2楼 发表于: 2013-03-30
bool ok = tableModel->insertRows(0,1);
应该是这样吧,文档上是这样说的!
bool QSqlTableModel::insertRows ( int row, int count, const QModelIndex & parent = QModelIndex() )
Inserts count empty rows at position row
离线hzymlx

只看该作者 3楼 发表于: 2013-04-01
dataMapper = new QDataWidgetMapper(this);
    QSqlDatabase sqlite = QSqlDatabase::database("sqlite");
    tableModel = new QSqlTableModel(this,sqlite);

    tableModel->setTable("database_info");
    tableModel->select();
    dataMapper->setModel( tableModel );
    dataMapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
    //dataMapper->addMapping(m_editId,DBINFO_ID);
    dataMapper->addMapping(m_editIpAddress,DBINFO_IPADDR);
    dataMapper->addMapping(m_editPort,DBINFO_PORT);
    dataMapper->addMapping(m_editDBName,DBINFO_DB);
    dataMapper->addMapping(m_editUserName,DBINFO_USER);
    dataMapper->addMapping(m_editPassword,DBINFO_PWD);
    if( tableModel->rowCount() == 0 )
    {
        int row = tableModel->rowCount();
        tableModel->insertRow( row );
        dataMapper->setCurrentIndex( row );

    }
    else
        dataMapper->toFirst();

问题出在不能将自动增加列映射进去,取消dataMapper->addMapping(m_editId,DBINFO_ID); 就可以增加了。
等等等
快速回复
限100 字节
 
上一个 下一个