Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QSqlQueryModel badly work in QML

QSqlQueryModel badly work in QML

Scheduled Pinned Locked Moved Solved General and Desktop
2 Posts 1 Posters 165 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    Mihaill
    wrote on last edited by
    #1

    Hi!
    This my class. I can't use updateModel(int batchId) in QML.
    In main.cpp I reite this

        MainWindowModel *mainWindowModel=new MainWindowModel();
        engine.rootContext()->setContextProperty("mainWindowModel",mainWindowModel);
    

    How I can use updateModel(int batchId) in QML?

    .h

    #ifndef MAINWINDOWMODEL_H
    #define MAINWINDOWMODEL_H
    
    #include <QObject>
    #include <QSqlQueryModel>
    
    class MainWindowModel : public QSqlQueryModel
    {
            Q_OBJECT
    public:
        explicit MainWindowModel(QObject *parent = nullptr);
    
        enum Roles
        {
            idRole= Qt::UserRole+1,
            serialNumber,
            cryptoSign,
            printedAt,
            doneAt,
            verifiedAt
        };
    
        Q_INVOKABLE QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
        Q_INVOKABLE QVariantMap get(int idx) const;
    
    signals:
    
    protected:
        QHash<int,QByteArray> roleNames()const;
    
    public slots:
        void updateModel();
        void updateModel(int batchId);
        int getId(int row);
    };
    
    #endif // MAINWINDOWMODEL_H
    
    

    .cpp

    #include "mainwindowmodel.h"
    
    MainWindowModel::MainWindowModel(QObject *parent) : QSqlQueryModel (parent)
    {
        this->updateModel();
    }
    
    QVariant MainWindowModel::data(const QModelIndex &index, int role) const
    {
        int columnId = role - Qt::UserRole - 1;
        // Создаём индекс с помощью новоиспечённого ID колонки
        QModelIndex modelIndex = this->index(index.row(), columnId);
    
        /* И с помощью уже метода data() базового класса
         * вытаскиваем данные для таблицы из модели
         * */
        return QSqlQueryModel::data(modelIndex, Qt::DisplayRole);
    }
    
    QVariantMap MainWindowModel::get(int idx) const
    {
        QVariantMap map;
        foreach(int k, roleNames().keys()) {
            map[roleNames().value(k)] = data(index(idx, 0), k);
        }
        return map;
    }
    
    QHash<int, QByteArray> MainWindowModel::roleNames() const
    {
        QHash<int, QByteArray> roles;
        roles[idRole]="id";
        roles[serialNumber]="serial";
        roles[cryptoSign]="crypto_sign";
        roles[printedAt]="printed_at";
        roles[doneAt]="done_at";
        roles[verifiedAt]="verified_at";
        return roles;
    }
    
    void MainWindowModel::updateModel()
    {
        this->setQuery("select id, serial, crypto_sign, printed_at, done_at, verified_at from Item");
    }
    
    void MainWindowModel::updateModel(int batchId)
    {
        this->setQuery("select id, serial, crypto_sign, printed_at, done_at, verified_at from Item WHERE batch_id = " + QString::number(batchId));
    }
    
    int MainWindowModel::getId(int row)
    {
        return this->data(this->index(row, 0), idRole).toInt();
    }
    
    
    1 Reply Last reply
    0
    • M Offline
      M Offline
      Mihaill
      wrote on last edited by
      #2

      it is work

      #ifndef MAINWINDOWMODEL_H
      #define MAINWINDOWMODEL_H
      
      #include <QObject>
      #include <QSqlQueryModel>
      
      class MainWindowModel : public QSqlQueryModel
      {
              Q_OBJECT
      public:
          explicit MainWindowModel(QObject *parent = nullptr);
      
          enum Roles
          {
              idRole= Qt::UserRole+1,
              serialNumber,
              cryptoSign,
              printedAt,
              doneAt,
              verifiedAt
          };
      
          Q_INVOKABLE QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
          Q_INVOKABLE QVariantMap get(int idx) const;
      
      signals:
      
      protected:
          QHash<int,QByteArray> roleNames()const;
      
      public slots:
          //void updateModel();
          void updateModel(int batchId);
          int getId(int row);
      };
      
      #endif // MAINWINDOWMODEL_H
      
      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved