• 11338阅读
  • 3回复

QSqlTableModel与QTableView结合使用中数据的编辑问题 [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 正序阅读 楼主  发表于: 2006-10-28
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
QSqlTableModel与QTableView结合使用中数据的编辑要注意的问题

// 删除某行记录,直接删除model的某行
void CompanyDialog::on_pushButtonDelete_clicked()
{
  int iRow = tableView->currentIndex().row();
  if (QMessageBox::question(this, "提示信息", "确定要删除第 " + QString::number(iRow+1) + " 行纪录?", "确定", "取消") == 0)
  {
      table.removeRow(iRow);
  }
}
// 在更新数据时,使用record.isNull("fieldname")来判断是否是要更新的字段,如果为false,
// 则表示此字段是要被更新的,如果此字段不更新,则设置此字段generated为false:
// record.setGenerated("fieldname", false)
void CompanyDialog::on_table_beforeUpdate(int row, QSqlRecord &record)
{
  if (record.isNull("pccode") == false && record.value("pccode").toString() == "")
  {
      QMessageBox::information(this, "提示信息", "计算机代码不能为空且必须唯一", "确定");
      record.setGenerated("pccode", false);
  }
  if (record.isNull("pname") == false && record.value("pname").toString() == "")
  {
      QMessageBox::information(this, "提示信息", "扣缴义务人名称不能为空且必须唯一", "确定");
      record.setGenerated("pname", false);
  }
}
// 再见插入数据前,对数据进行验证,如果不符合条件,不允许插入,则清空此记录,
// 但此时在界面上插入行还会保留状态,如果要删除此插入状态行,则直接删除model的
// 最后一行table.removeRow(table.rowCount() - 1)
void CompanyDialog::on_table_beforeInsert(QSqlRecord &record)
{
  if (record.value("pccode").toString() == "" || record.value("pname").toString() == "")
  {
      QMessageBox::information(this, "提示信息", "计算机代码和扣缴义务人名称不能为空且必须唯一", "确定");
      record.clear();
      table.removeRow(table.rowCount() - 1);
  }
}
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线zheng501gf

只看该作者 3楼 发表于: 2009-11-13
如果要是显示数据时想把在数据显示之前进行编码转换一下,不知能否?用Qsqltalbemodel,Qtableview显示数据。
离线toldo_chen
只看该作者 2楼 发表于: 2008-12-16
正好卡在这,谢谢版主
离线yleesun

只看该作者 1楼 发表于: 2008-12-10
好,顶,顶。
快速回复
限100 字节
 
上一个 下一个