在 qt 中使用 QStandardItemModel 显示 QSQLite 数据库 [关闭]

Posted

技术标签:

【中文标题】在 qt 中使用 QStandardItemModel 显示 QSQLite 数据库 [关闭]【英文标题】:Display QSQLite database using QStandardItemModel in qt [closed] 【发布时间】:2017-08-08 16:10:18 【问题描述】:

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

我该怎么做?

【问题讨论】:

【参考方案1】:

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

要在 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()

【讨论】:

【参考方案2】:

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);

【讨论】:

以上是关于在 qt 中使用 QStandardItemModel 显示 QSQLite 数据库 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Qt5 中使用 OpenCV

在 Qt4 中使用最新的 Qt5 串口库

在ros中使用qt图形界面

在Qt中使用 Qt Chart 5.7.0

在ROS中使用QT界面

在 Qt 中使用按钮打开文本文件