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. QAbstractItemModel beginInsertRow, reenumerate other rows?
Forum Updated to NodeBB v4.3 + New Features

QAbstractItemModel beginInsertRow, reenumerate other rows?

Scheduled Pinned Locked Moved Solved General and Desktop
11 Posts 4 Posters 1.4k Views 1 Watching
  • 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
    Marek
    wrote on last edited by
    #1

    Hi
    I have question:
    I'm adding data to QAbstractItemModel that was previously set. I have

    struct DevPlaceDataStruct {
        int         row;
        int         dev_id;
        QString     text;
    };
    

    and of course

    private:
        QMap<int,DevPlaceDataStruct*> modelMap;
    

    Model is indexed in modelMap by (int)row. So if I add a new row, I need to reenumerate the rest of rows, right?
    beginInsertRows only notifies the model about the change?
    So in consequence I need to change modelMap from the row position I'm inserting to the end ?

    best,
    Marek

    1 Reply Last reply
    0
    • Christian EhrlicherC Offline
      Christian EhrlicherC Offline
      Christian Ehrlicher
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Why not simply use a QVector<DevPlaceDataStruct*> instead? Then use the index as row and all works without additional stuff.

      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
      Visit the Qt Academy at https://academy.qt.io/catalog

      M 1 Reply Last reply
      3
      • Christian EhrlicherC Christian Ehrlicher

        Why not simply use a QVector<DevPlaceDataStruct*> instead? Then use the index as row and all works without additional stuff.

        M Offline
        M Offline
        Marek
        wrote on last edited by
        #3

        @Christian-Ehrlicher actually... I haven't thought about this earlier, because every subclass of QAbstractListModel I have seen used QMap not QVector but yes it should work.
        Thanks,
        Marek

        1 Reply Last reply
        0
        • AndySA Offline
          AndySA Offline
          AndyS
          Moderators
          wrote on last edited by
          #4

          @Marek can you marked this as solved if @Christian-Ehrlicher's answer solves the issue for you? Thanks.

          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          M 1 Reply Last reply
          1
          • AndySA AndyS

            @Marek can you marked this as solved if @Christian-Ehrlicher's answer solves the issue for you? Thanks.

            M Offline
            M Offline
            Marek
            wrote on last edited by
            #5

            @AndyS Yes I will, it looks like it is sound sollution, I just couldn't find time to test it ;) I will try it ASAP.

            1 Reply Last reply
            0
            • M Offline
              M Offline
              Marek
              wrote on last edited by
              #6

              Hi
              Actually I have problem with both methods QVector and QMap it gives me the same result.
              Problem is when I remove row=0 and then I add item which should go into row=0.
              Result is that I have in view: Item1, Item2, black space, item3.
              When I add row in the middle or at the end it is OK.
              When I'm checking debug it looks like it should work, row is correct, model count is correct

              DevPlaceModel::removeRow dev_id: 74  row: 0  count: 2
              DevPlaceModel::addRow dev_id: 74  place_number: 1  row: 0  count: 3
              

              I have attached cpp, h and qml file.
              Cpp and h has commented out version with QMap, so it works with QVector, but both methods have a problem with row=0.
              At the beginning I'm settings model from another class by calling
              beginSetModel();
              addPlace(int dev_id,int place_number);
              endSetModel();

              When model is set I'm using
              addRow(int dev_id,int place_number);
              removeRow(int dev_id);

              Can someone shed some light?

              Best,
              Marek

              #include <QtCore>
              #include <QAbstractListModel>
              #include <QtXml/QDomNode>
              #include <QtXml/QDomElement>
              #include <QGeoCoordinate>
              #include <QGeoRectangle>
              #include "helper.h"
              
              
              struct DevPlaceDataStruct {
                  int         row;
                  int         dev_id;
                  int         place_number;
                  QString     text;
              };
              
              class DevPlaceModel : public QAbstractListModel
              {
                  Q_OBJECT
              public:
                  enum ItemRoles {
                      IdRole = Qt::UserRole + 1,
                      TextRole = Qt::UserRole + 2,
                      RowRole = Qt::UserRole + 3,
                  };
              
                  DevPlaceModel(QObject *parent);
              
                  virtual int rowCount(const QModelIndex&) const { return vector.count(); }
                //  virtual int rowCount(const QModelIndex&) const { return modelMap.count(); }
                  virtual QVariant data(const QModelIndex &index, int role) const;
              
                  QHash<int, QByteArray> roleNames() const;
                  Q_INVOKABLE int getRow(int dev_id);
                  Q_INVOKABLE int getDevId(int row);
              public slots:
                  void beginSetModel();
                  void addPlace(int dev_id,int place_number);
                  void addRow(int dev_id,int place_number);
                  void removeRow(int dev_id);
                  void endSetModel();
              signals:
              
              private slots:
                  QVariant getRoleData(int role,int row) const;
              private:
                  QVector<DevPlaceDataStruct*> vector;
                //  QMap<int,DevPlaceDataStruct*> modelMap;
                  QHash<int, QByteArray> roles;
                  int     curr_dev_id;
              };
              
              #include "dev-place-model.h"
              
              DevPlaceModel::DevPlaceModel(QObject *parent):QAbstractListModel(parent) {
              
                  roles[IdRole] = "id_role";
                  roles[TextRole]= "text_role";
                  roles[RowRole]= "row_role";
              
                  curr_dev_id=0;
              }
              QHash<int, QByteArray> DevPlaceModel::roleNames() const {
                  return roles;
              }
              QVariant DevPlaceModel::data(const QModelIndex &index, int role) const {
                  if(!index.isValid()) {
                      return QVariant();
                  }
                  if(roles.contains(role) && vector.count()-1>=index.row()) {
                      return getRoleData(role,index.row());
                  }
              //    if(roles.contains(role) && modelMap.contains(index.row())) {
              //        return getRoleData(role,index.row());
              //    }
                  return QVariant();
              }
              QVariant DevPlaceModel::getRoleData(int role, int row) const {
                  DevPlaceDataStruct *p=vector.at(row);
              //    DevPlaceDataStruct *p=modelMap[row];
                  switch(role) {
                  case IdRole:
                      return QVariant(p->dev_id);
                  case TextRole:
                      return QVariant(p->text);
                  case RowRole:
              //        return QVariant(p->row);
                      return QVariant(row);
                  default:
                      qWarning()<<"DevPlaceModel::getRoleData there is no role:"<<role;
                  }
              }
              void DevPlaceModel::beginSetModel() {
                  beginResetModel();
                  for(int i=0;i<vector.count();i++) {
                      delete vector.at(i);
                  }
                  vector.clear();
              
              //    beginResetModel();
              //    if(modelMap.count()) {
              //        QMapIterator<int,DevPlaceDataStruct*> i(modelMap);
              //        while(i.hasNext()) {
              //            i.next();
              //            delete i.value();
              //        }
              //        modelMap.clear();
              //    }
              }
              void DevPlaceModel::addPlace(int dev_id, int place_number) {
                  qDebug()<<"DevPlaceModel::addPlace dev_id:"<<dev_id<<" place_number:"<<place_number;
                  DevPlaceDataStruct *p=new DevPlaceDataStruct;
                  p->dev_id=dev_id;
                  p->text=QString("Miejsce: %1").arg(place_number);
                  p->place_number=place_number;
                  vector.append(p);
              //    p->row=modelMap.count();
              //    modelMap.insert(p->row,p);
              }
              void DevPlaceModel::endSetModel() {
                  emit endResetModel();
              }
              void DevPlaceModel::addRow(int dev_id, int place_number) {
                  int row=-1;
                  for(int i=0;i<vector.count();i++) {
                      DevPlaceDataStruct *d=vector.at(i);
                      if(d->place_number>=place_number) {
                          row=((i-1)<0 ? 0 : i-1);
                          break;
                      }
                  }
                  if(row==-1) {
                      row=vector.count();
                  }
                  DevPlaceDataStruct *em=new DevPlaceDataStruct;
                  em->dev_id=dev_id;
                  em->text=QString("Miejsce: %1").arg(place_number);
                  em->place_number=place_number;
                  emit beginInsertRows(QModelIndex(),row,row);
                  vector.insert(row,em);
                  emit endInsertRows();
                  qDebug()<<"DevPlaceModel::addRow dev_id:"<<dev_id<<" place_number:"<<place_number<<" row:"<<row<<" count:"<<vector.count();
              
              //    int row=-1;
              //    bool found=false;
              //    int new_idx=0;
              //    QMap<int,DevPlaceDataStruct*> new_modelMap;
              //    QMapIterator<int,DevPlaceDataStruct*> i(modelMap);
              //    while(i.hasNext()) {
              //        i.next();
              //        if(!found && i.value()->place_number>=place_number) {
              //            row=((i.value()->row-1)<0 ? 0 : i.value()->row-1);
              //            found=true;
              //            new_idx++;
              //        }
              //        i.value()->row==new_idx;
              //        new_modelMap.insert(new_idx,i.value());
              //        new_idx++;
              
              //    }
              //    if(row==-1) {
              //        row=modelMap.count();
              //    }
              //    DevPlaceDataStruct *em=new DevPlaceDataStruct;
              //    em->dev_id=dev_id;
              //    em->text=QString("Miejsce: %1").arg(place_number);
              //    em->place_number=place_number;
              //    em->row=row;
              //    emit beginInsertRows(QModelIndex(),row,row);
              //    new_modelMap.insert(em->row,em);
              //    modelMap.clear();
              //    modelMap=new_modelMap;
              //    emit endInsertRows();
              //    qDebug()<<"DevPlaceModel::addRow dev_id:"<<dev_id<<" place_number:"<<place_number<<" row:"<<row<<" count:"<<modelMap.count();
              
              }
              void DevPlaceModel::removeRow(int dev_id) {
                  int row=-1;
                  for(int i=0;i<vector.count();i++) {
                      DevPlaceDataStruct *d=vector.at(i);
                      if(d->dev_id==dev_id) {
                          row=i;
                          break;
                      }
                  }
                  if(row>=0) {
                      beginRemoveRows(QModelIndex(),row,row);
                      delete vector.at(row);
                      vector.remove(row);
                      endRemoveRows();
                  }
                  qDebug()<<"DevPlaceModel::removeRow dev_id:"<<dev_id<<" row:"<<row<<" count:"<<vector.count();
              
              //    int row=-1;
              //    int new_idx=0;
              //    QMap<int,DevPlaceDataStruct*> new_modelMap;
              //    QMapIterator<int,DevPlaceDataStruct*> i(modelMap);
              //    while(i.hasNext()) {
              //        i.next();
              //        if(i.value()->dev_id==dev_id) {
              //            row=i.key();
              //        }
              //        else {
              //            i.value()->row=new_idx;
              //            new_modelMap.insert(new_idx,i.value());
              //            new_idx++;
              //        }
              //    }
              //    if(row<0) {
              //        qWarning()<<"DevPlaceModel::removeRow no row:"<<row;
              //        return;
              //    }
              //    beginRemoveRows(QModelIndex(),row,row);
              //    delete modelMap[row];
              //    modelMap.clear();
              //    modelMap=new_modelMap;
              //    endRemoveRows();
              //    qDebug()<<"DevPlaceModel::removeRow dev_id:"<<dev_id<<" row:"<<row<<" count:"<<modelMap.count();
              }
              int DevPlaceModel::getRow(int dev_id) {
                  for(int i=0;i<vector.count();i++) {
                      DevPlaceDataStruct *d=vector.at(i);
                      if(d->dev_id==dev_id)
                          return i;
                  }
                  return -1;
              
              //    QMapIterator<int,DevPlaceDataStruct*> i(modelMap);
              //    while(i.hasNext()) {
              //        i.next();
              //        if(i.value()->dev_id==dev_id)
              //            return i.value()->row;
              //    }
              //    return 0;
              }
              int DevPlaceModel::getDevId(int row) {
                  if(vector.count()-1>=row) {
                      qWarning()<<"DevPlaceModel::getDevId there is no row:"<<row;
                      return 0;
                  }
                  return vector.at(row)->dev_id;
              
              //    if(!modelMap.contains(row)) {
              //        qWarning()<<"DevPlaceModel::getDevId there is no row:"<<row;
              //        return 0;
              //    }
              //    return modelMap[row]->dev_id;
              }
              
              QControls2.ComboBox {
                          id:placeCombo
                          anchors.top:addressText.bottom
                          anchors.horizontalCenter: parent.horizontalCenter
                          width:parent.width*0.6
                          height:parent.height*0.15
                          model: DevPlaceModel
                          textRole:"text_role"
                         // currentIndex:DevPlaceModel.getRow(root.dev_id)
                      }
              
              JonBJ 1 Reply Last reply
              0
              • M Marek

                Hi
                Actually I have problem with both methods QVector and QMap it gives me the same result.
                Problem is when I remove row=0 and then I add item which should go into row=0.
                Result is that I have in view: Item1, Item2, black space, item3.
                When I add row in the middle or at the end it is OK.
                When I'm checking debug it looks like it should work, row is correct, model count is correct

                DevPlaceModel::removeRow dev_id: 74  row: 0  count: 2
                DevPlaceModel::addRow dev_id: 74  place_number: 1  row: 0  count: 3
                

                I have attached cpp, h and qml file.
                Cpp and h has commented out version with QMap, so it works with QVector, but both methods have a problem with row=0.
                At the beginning I'm settings model from another class by calling
                beginSetModel();
                addPlace(int dev_id,int place_number);
                endSetModel();

                When model is set I'm using
                addRow(int dev_id,int place_number);
                removeRow(int dev_id);

                Can someone shed some light?

                Best,
                Marek

                #include <QtCore>
                #include <QAbstractListModel>
                #include <QtXml/QDomNode>
                #include <QtXml/QDomElement>
                #include <QGeoCoordinate>
                #include <QGeoRectangle>
                #include "helper.h"
                
                
                struct DevPlaceDataStruct {
                    int         row;
                    int         dev_id;
                    int         place_number;
                    QString     text;
                };
                
                class DevPlaceModel : public QAbstractListModel
                {
                    Q_OBJECT
                public:
                    enum ItemRoles {
                        IdRole = Qt::UserRole + 1,
                        TextRole = Qt::UserRole + 2,
                        RowRole = Qt::UserRole + 3,
                    };
                
                    DevPlaceModel(QObject *parent);
                
                    virtual int rowCount(const QModelIndex&) const { return vector.count(); }
                  //  virtual int rowCount(const QModelIndex&) const { return modelMap.count(); }
                    virtual QVariant data(const QModelIndex &index, int role) const;
                
                    QHash<int, QByteArray> roleNames() const;
                    Q_INVOKABLE int getRow(int dev_id);
                    Q_INVOKABLE int getDevId(int row);
                public slots:
                    void beginSetModel();
                    void addPlace(int dev_id,int place_number);
                    void addRow(int dev_id,int place_number);
                    void removeRow(int dev_id);
                    void endSetModel();
                signals:
                
                private slots:
                    QVariant getRoleData(int role,int row) const;
                private:
                    QVector<DevPlaceDataStruct*> vector;
                  //  QMap<int,DevPlaceDataStruct*> modelMap;
                    QHash<int, QByteArray> roles;
                    int     curr_dev_id;
                };
                
                #include "dev-place-model.h"
                
                DevPlaceModel::DevPlaceModel(QObject *parent):QAbstractListModel(parent) {
                
                    roles[IdRole] = "id_role";
                    roles[TextRole]= "text_role";
                    roles[RowRole]= "row_role";
                
                    curr_dev_id=0;
                }
                QHash<int, QByteArray> DevPlaceModel::roleNames() const {
                    return roles;
                }
                QVariant DevPlaceModel::data(const QModelIndex &index, int role) const {
                    if(!index.isValid()) {
                        return QVariant();
                    }
                    if(roles.contains(role) && vector.count()-1>=index.row()) {
                        return getRoleData(role,index.row());
                    }
                //    if(roles.contains(role) && modelMap.contains(index.row())) {
                //        return getRoleData(role,index.row());
                //    }
                    return QVariant();
                }
                QVariant DevPlaceModel::getRoleData(int role, int row) const {
                    DevPlaceDataStruct *p=vector.at(row);
                //    DevPlaceDataStruct *p=modelMap[row];
                    switch(role) {
                    case IdRole:
                        return QVariant(p->dev_id);
                    case TextRole:
                        return QVariant(p->text);
                    case RowRole:
                //        return QVariant(p->row);
                        return QVariant(row);
                    default:
                        qWarning()<<"DevPlaceModel::getRoleData there is no role:"<<role;
                    }
                }
                void DevPlaceModel::beginSetModel() {
                    beginResetModel();
                    for(int i=0;i<vector.count();i++) {
                        delete vector.at(i);
                    }
                    vector.clear();
                
                //    beginResetModel();
                //    if(modelMap.count()) {
                //        QMapIterator<int,DevPlaceDataStruct*> i(modelMap);
                //        while(i.hasNext()) {
                //            i.next();
                //            delete i.value();
                //        }
                //        modelMap.clear();
                //    }
                }
                void DevPlaceModel::addPlace(int dev_id, int place_number) {
                    qDebug()<<"DevPlaceModel::addPlace dev_id:"<<dev_id<<" place_number:"<<place_number;
                    DevPlaceDataStruct *p=new DevPlaceDataStruct;
                    p->dev_id=dev_id;
                    p->text=QString("Miejsce: %1").arg(place_number);
                    p->place_number=place_number;
                    vector.append(p);
                //    p->row=modelMap.count();
                //    modelMap.insert(p->row,p);
                }
                void DevPlaceModel::endSetModel() {
                    emit endResetModel();
                }
                void DevPlaceModel::addRow(int dev_id, int place_number) {
                    int row=-1;
                    for(int i=0;i<vector.count();i++) {
                        DevPlaceDataStruct *d=vector.at(i);
                        if(d->place_number>=place_number) {
                            row=((i-1)<0 ? 0 : i-1);
                            break;
                        }
                    }
                    if(row==-1) {
                        row=vector.count();
                    }
                    DevPlaceDataStruct *em=new DevPlaceDataStruct;
                    em->dev_id=dev_id;
                    em->text=QString("Miejsce: %1").arg(place_number);
                    em->place_number=place_number;
                    emit beginInsertRows(QModelIndex(),row,row);
                    vector.insert(row,em);
                    emit endInsertRows();
                    qDebug()<<"DevPlaceModel::addRow dev_id:"<<dev_id<<" place_number:"<<place_number<<" row:"<<row<<" count:"<<vector.count();
                
                //    int row=-1;
                //    bool found=false;
                //    int new_idx=0;
                //    QMap<int,DevPlaceDataStruct*> new_modelMap;
                //    QMapIterator<int,DevPlaceDataStruct*> i(modelMap);
                //    while(i.hasNext()) {
                //        i.next();
                //        if(!found && i.value()->place_number>=place_number) {
                //            row=((i.value()->row-1)<0 ? 0 : i.value()->row-1);
                //            found=true;
                //            new_idx++;
                //        }
                //        i.value()->row==new_idx;
                //        new_modelMap.insert(new_idx,i.value());
                //        new_idx++;
                
                //    }
                //    if(row==-1) {
                //        row=modelMap.count();
                //    }
                //    DevPlaceDataStruct *em=new DevPlaceDataStruct;
                //    em->dev_id=dev_id;
                //    em->text=QString("Miejsce: %1").arg(place_number);
                //    em->place_number=place_number;
                //    em->row=row;
                //    emit beginInsertRows(QModelIndex(),row,row);
                //    new_modelMap.insert(em->row,em);
                //    modelMap.clear();
                //    modelMap=new_modelMap;
                //    emit endInsertRows();
                //    qDebug()<<"DevPlaceModel::addRow dev_id:"<<dev_id<<" place_number:"<<place_number<<" row:"<<row<<" count:"<<modelMap.count();
                
                }
                void DevPlaceModel::removeRow(int dev_id) {
                    int row=-1;
                    for(int i=0;i<vector.count();i++) {
                        DevPlaceDataStruct *d=vector.at(i);
                        if(d->dev_id==dev_id) {
                            row=i;
                            break;
                        }
                    }
                    if(row>=0) {
                        beginRemoveRows(QModelIndex(),row,row);
                        delete vector.at(row);
                        vector.remove(row);
                        endRemoveRows();
                    }
                    qDebug()<<"DevPlaceModel::removeRow dev_id:"<<dev_id<<" row:"<<row<<" count:"<<vector.count();
                
                //    int row=-1;
                //    int new_idx=0;
                //    QMap<int,DevPlaceDataStruct*> new_modelMap;
                //    QMapIterator<int,DevPlaceDataStruct*> i(modelMap);
                //    while(i.hasNext()) {
                //        i.next();
                //        if(i.value()->dev_id==dev_id) {
                //            row=i.key();
                //        }
                //        else {
                //            i.value()->row=new_idx;
                //            new_modelMap.insert(new_idx,i.value());
                //            new_idx++;
                //        }
                //    }
                //    if(row<0) {
                //        qWarning()<<"DevPlaceModel::removeRow no row:"<<row;
                //        return;
                //    }
                //    beginRemoveRows(QModelIndex(),row,row);
                //    delete modelMap[row];
                //    modelMap.clear();
                //    modelMap=new_modelMap;
                //    endRemoveRows();
                //    qDebug()<<"DevPlaceModel::removeRow dev_id:"<<dev_id<<" row:"<<row<<" count:"<<modelMap.count();
                }
                int DevPlaceModel::getRow(int dev_id) {
                    for(int i=0;i<vector.count();i++) {
                        DevPlaceDataStruct *d=vector.at(i);
                        if(d->dev_id==dev_id)
                            return i;
                    }
                    return -1;
                
                //    QMapIterator<int,DevPlaceDataStruct*> i(modelMap);
                //    while(i.hasNext()) {
                //        i.next();
                //        if(i.value()->dev_id==dev_id)
                //            return i.value()->row;
                //    }
                //    return 0;
                }
                int DevPlaceModel::getDevId(int row) {
                    if(vector.count()-1>=row) {
                        qWarning()<<"DevPlaceModel::getDevId there is no row:"<<row;
                        return 0;
                    }
                    return vector.at(row)->dev_id;
                
                //    if(!modelMap.contains(row)) {
                //        qWarning()<<"DevPlaceModel::getDevId there is no row:"<<row;
                //        return 0;
                //    }
                //    return modelMap[row]->dev_id;
                }
                
                QControls2.ComboBox {
                            id:placeCombo
                            anchors.top:addressText.bottom
                            anchors.horizontalCenter: parent.horizontalCenter
                            width:parent.width*0.6
                            height:parent.height*0.15
                            model: DevPlaceModel
                            textRole:"text_role"
                           // currentIndex:DevPlaceModel.getRow(root.dev_id)
                        }
                
                JonBJ Offline
                JonBJ Offline
                JonB
                wrote on last edited by
                #7

                @Marek
                Two observations:

                1. It does not actually matter, but why does your beginSetModel() call beginResetModel(); directly while endSetModel() does an emit endResetModel();?

                2. Your addRow()'s row=((i-1)<0 ? 0 : i-1); returns 0 for all 3 row == -1 and row == 0 and row == 1. Is that related to your problem?

                M 1 Reply Last reply
                0
                • JonBJ JonB

                  @Marek
                  Two observations:

                  1. It does not actually matter, but why does your beginSetModel() call beginResetModel(); directly while endSetModel() does an emit endResetModel();?

                  2. Your addRow()'s row=((i-1)<0 ? 0 : i-1); returns 0 for all 3 row == -1 and row == 0 and row == 1. Is that related to your problem?

                  M Offline
                  M Offline
                  Marek
                  wrote on last edited by
                  #8

                  @JonB

                  1. My mistake shold call endResetModel
                  2. This is correct I think, It is in loop from i=0 to vector.count. So when I have items (2,3) in vector and I'm adding item 1, it will go to row=0
                    When I have items 1,3 and I'm adding item 2 it will go to row=1
                    Right?
                  JonBJ 1 Reply Last reply
                  0
                  • M Marek

                    @JonB

                    1. My mistake shold call endResetModel
                    2. This is correct I think, It is in loop from i=0 to vector.count. So when I have items (2,3) in vector and I'm adding item 1, it will go to row=0
                      When I have items 1,3 and I'm adding item 2 it will go to row=1
                      Right?
                    JonBJ Offline
                    JonBJ Offline
                    JonB
                    wrote on last edited by
                    #9

                    @Marek
                    I don't know, I don't claim to follow your code. I'm just "surprised" that an insert where row == 0 and row == 1 both map to row 0.

                    M 1 Reply Last reply
                    0
                    • JonBJ JonB

                      @Marek
                      I don't know, I don't claim to follow your code. I'm just "surprised" that an insert where row == 0 and row == 1 both map to row 0.

                      M Offline
                      M Offline
                      Marek
                      wrote on last edited by
                      #10

                      @JonB IMHO model is OK, when I remove and then add item 1 (I have 1,2,3) from debug I have:

                      DevPlaceModel::removeRow dev_id: 74  row: 0  count: 2
                      DevPlaceModel::addRow dev_id: 74  place_number: 1  row: 0  count: 3  vector: QVector(0x5636891742c0, 0x56368c2e0a90, 0x56368c23d700)
                      

                      So view should have 3 items, instead there is like in image (0_1536919537683_test.png

                      1 Reply Last reply
                      0
                      • M Offline
                        M Offline
                        Marek
                        wrote on last edited by
                        #11

                        Hi
                        Sorry for late reply. I don't have this problem in view like ListView, maybe it is some bug in QControls Combo, I need to prepare sample and report.
                        Definitelly using QVector instead of QMap is more convinient in model,
                        thanks for the hint.
                        Best,
                        Marek

                        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