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

时间:2017-08-08 16:10:18

标签: c++ qt sqlite qt5 qtableview

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

我该如何解决?

2 个答案:

答案 0 :(得分:2)

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

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

有关详细信息,建议您阅读以下内容:

此选项的优点:

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

  • 也可用于以编程方式访问数据库,而不将其绑定到视图。

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

答案 1 :(得分:1)

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