在 qt 中使用 QStandardItemModel 显示 QSQLite 数据库



我有一个QSQLite数据库,我已经从中读取了所有值。现在,我想使用QStandardItemModel将整个数据库显示在QTableView上。

我该怎么做?

这个答案并没有试图直接回答这个问题,因为我认为有作者不知道的更好的选择,但我试图引导他选择一个更好的选项。因此,我提出以下建议:

要在QTableView中显示数据库的信息,建议使用QSqlTableModel

类为单个 QSqlTableModel 提供可编辑的数据模型 数据库表。

QSqlTableModel 是一个用于读写的高级接口 单个表中的数据库记录。它建立在 较低级别的 QSqlQuery,可用于提供数据以查看类 比如QTableView。

例如:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
if (!db.open())
qDebug()<< "Cannot open database"
QSqlTableModel *model = new QSqlTableModel;
model->setTable("person");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
QTableView view;
view.setModel(model)

有关更多信息,我建议您阅读以下内容:

  • http://doc.qt.io/qt-5/sql-model.html
  • http://doc.qt.io/qt-5/qtsql-cachedtable-example.html

此选项的优点:

  • 该类会自动识别字段及其类型。

  • 还用于以编程方式访问数据库,而无需将其绑定到视图。

  • 如果需要添加过滤器,则必须使用setFilter(),如果需要订购,可以使用setSort()

QStandardItemModel 类提供了一个用于存储自定义数据的通用模型。

这是QStandardItemModel的一个例子:

if(db.isOpen())
{
QStandardItemModel *standardModel = new QStandardItemModel();
QSqlQuery query(db);
query.prepare("SELECT * FROM DayLog ORDER BY ID");
if(query.exec())
while(query.next())
{
QStandardItem *item = new QStandardItem(query.value("date").toString());
standardModel->appendRow(item);
}
ui->tableView->setModel(standardModel);
}

相关内容

  • 没有找到相关文章

最新更新