使用QT和SQLite通过单元格编辑更新数据库

时间:2017-04-13 11:09:48

标签: c++ qt sqlite qtableview

我正在创建一个使用SQLite数据库访问的应用程序,该应用程序在QTableView中显示数据库搜索。搜索正在查找所有列。现在我希望能够编辑单元格并保存到数据库中。我似乎能够编辑单元格,但不保存数据。

  locationManager.requestAlwaysAuthorization()  // Add this Code 
  locationManager.requestWhenInUseAuthorization()
  locationManager.startUpdatingLocation()

这是我用来在QTableView中显示数据的代码。我尝试在QSqlTableModel和QSqlQueryModel之间进行切换。基于文档和谷歌搜索时间,似乎QTableView应该在编辑单元格时相应地更新数据库。我一定错过了什么。

起初,我认为它可能是由没有主键的数据库引起的,但两种情况都是相同的。

1 个答案:

答案 0 :(得分:1)

我找到了解决问题的方法。我缺少的是具有精心设计的查询的setFilter()。

QSqlTableModel中反对QSqlQueryModel setQuery(),我们应该使用setFilter(),这是SQL查询的WHERE部分,setTable() 1}}这是"Select * FROM tablename"。现在,要通过QTableView使表格可编辑,我们所要做的就是使用setEditStrategy()。有几个选项可供选择,但我需要的是setEditStrategy(QSqlTableModel::OnFieldChange)

void MainWindow::on_search_box_textChanged(const QString &arg1)
{
QSqlTableModel *GetTable = new QSqlTableModel(ui->tableView);

if(!arg1.isEmpty()){
    GetTable->setTable("DHL");
    GetTable->setEditStrategy(QSqlTableModel::OnFieldChange);
    GetTable->setFilter(QString("Date LIKE '""%"+arg1+"%""' OR Name LIKE '""%"+arg1+"%""' OR bill LIKE '""%"+arg1+"%""' OR [B O L] LIKE '""%"+arg1+"%""' OR SO LIKE '""%"+arg1+"%""' OR ETA LIKE '""%"+arg1+"%""' OR Description LIKE '""%"+arg1+"%""';"));
    GetTable->select();

    QTableView *tableview = new QTableView();
    ui->tableView->setModel(GetTable);
    ui->tableView->hideColumn(7); // don't show the ID
    ui->tableView->setAlternatingRowColors(GetTable);
    ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    ui->tableView->show();
}
else
{
    GetTable->clear();
    ui->tableView->clearFocus();
    ui->tableView->setModel(GetTable);
}

我希望有人会觉得它很有用。