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

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

我该怎么做?

【问题讨论】:

    标签: c++ qt sqlite qt5 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)
    

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

    此选项的优点:

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

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

    • 如果您需要添加过滤器,您必须使用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);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-22
        • 1970-01-01
        • 1970-01-01
        • 2018-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多