Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. [Solved] Invidual itemDelegate for each column of table\listview
Forum Updated to NodeBB v4.3 + New Features

[Solved] Invidual itemDelegate for each column of table\listview

Scheduled Pinned Locked Moved QML and Qt Quick
23 Posts 2 Posters 9.0k Views 2 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.
  • p3c0P p3c0

    @illunara Here it is.

    styleData.index only available in tableview, treeview, not TableViewColumn

    Since it is available in tableview and treeview it is also available in TableViewColumn. Aren't you using TableViewColumn in TreeView ?
    What about this code ?

    MouseArea {
                    anchors.fill: parent
                    onClicked: console.log(styleData.index, dataModel.parent(styleData.index))
                    //gives the index of child and parent of that child
                }
    

    Didn't this work for you ?

    I Offline
    I Offline
    illunara
    wrote on last edited by
    #14

    @p3c0 I'm sorry about the late reply, thing is getting crazy here.
    Anyway about the code you posted. Yes, i tried, but its not working. The styleData in tableviewColumn is difference one from Treeview styleData. That's why, you can't use styleData of tableview to access data in Treeview.

    The internalPointer of QModelIndex() using styleData.index in tableviewColumn is nullpointer

    p3c0P 1 Reply Last reply
    0
    • I illunara

      @p3c0 I'm sorry about the late reply, thing is getting crazy here.
      Anyway about the code you posted. Yes, i tried, but its not working. The styleData in tableviewColumn is difference one from Treeview styleData. That's why, you can't use styleData of tableview to access data in Treeview.

      The internalPointer of QModelIndex() using styleData.index in tableviewColumn is nullpointer

      p3c0P Offline
      p3c0P Offline
      p3c0
      Moderators
      wrote on last edited by
      #15

      @illunara Its time to post your code now :) I think something is missing. The code that I posted earlier for TableViewColumn in TreeView works perfectly for me with QAbstractItemModel.

      157

      1 Reply Last reply
      0
      • I Offline
        I Offline
        illunara
        wrote on last edited by
        #16

        @p3c0 I put the qml code in a gist since it quite long
        https://gist.github.com/illunara/2957ae5d7e41befc77fb

        Here is the Constructor for TreeviewModel, i put an item inside it

        TreeViewDataModel::TreeViewDataModel(QObject* parent ) : QAbstractItemModel(parent) {
        m_root = new Project();
        
        Project* project = new Project();
        project->m_name = "Hello World";
        project->setParent(m_root);
        m_root->appendChild(project);
        

        }

        And this is the function i call from QML

        QVariantMap TreeViewDataModel::get(QModelIndex index) {
        ModelAbstract* model = static_cast<ModelAbstract*>(index.internalPointer());
        qDebug() << model->getData("ItemType");
        return QVariantMap();
        

        }

        The result is

        QVariant(QString, "Project")
        QVariant(QString, "Project")
        

        This function got call twice, that's true ( because i have 2 items in treeview, one is the root, and other is the item i added) but result i wrong.
        And if i add one more item under root, this will crash.

        p3c0P 1 Reply Last reply
        0
        • I illunara

          @p3c0 I put the qml code in a gist since it quite long
          https://gist.github.com/illunara/2957ae5d7e41befc77fb

          Here is the Constructor for TreeviewModel, i put an item inside it

          TreeViewDataModel::TreeViewDataModel(QObject* parent ) : QAbstractItemModel(parent) {
          m_root = new Project();
          
          Project* project = new Project();
          project->m_name = "Hello World";
          project->setParent(m_root);
          m_root->appendChild(project);
          

          }

          And this is the function i call from QML

          QVariantMap TreeViewDataModel::get(QModelIndex index) {
          ModelAbstract* model = static_cast<ModelAbstract*>(index.internalPointer());
          qDebug() << model->getData("ItemType");
          return QVariantMap();
          

          }

          The result is

          QVariant(QString, "Project")
          QVariant(QString, "Project")
          

          This function got call twice, that's true ( because i have 2 items in treeview, one is the root, and other is the item i added) but result i wrong.
          And if i add one more item under root, this will crash.

          p3c0P Offline
          p3c0P Offline
          p3c0
          Moderators
          wrote on last edited by
          #17

          @illunara Sorry but I'm unable to figure out what you are trying to do from the code.
          What do you expect it to print ? "Hello World" ?
          Why are you casting index it to model ? index.model() should be a better way to do.
          If you meant to cast it to an Project object and get its data it should be something like

          Project *item = static_cast<Project*>(index.internalPointer());
          return item->data(0).toString();
          

          Perhaps you should elaborate it more precisely.

          157

          I 1 Reply Last reply
          0
          • p3c0P p3c0

            @illunara Sorry but I'm unable to figure out what you are trying to do from the code.
            What do you expect it to print ? "Hello World" ?
            Why are you casting index it to model ? index.model() should be a better way to do.
            If you meant to cast it to an Project object and get its data it should be something like

            Project *item = static_cast<Project*>(index.internalPointer());
            return item->data(0).toString();
            

            Perhaps you should elaborate it more precisely.

            I Offline
            I Offline
            illunara
            wrote on last edited by
            #18

            @p3c0 Yup i think the output should be

            QVariant(QString, "Project")
            QVariant(QString, "Hello World")
            

            Oh and, Project is delivered class of ModelAbstract. Sorry, my fault

            class ModelAbstract {
            public:
                 ModelAbstract();
            
                 virtual QVariant    getData(QString dataname) const = 0;
            }
            
            class Project  : public ModelAbstract {
            public:
                virtual Variant    getData(QString dataname) const;
            }
            
            p3c0P 1 Reply Last reply
            0
            • I illunara

              @p3c0 Yup i think the output should be

              QVariant(QString, "Project")
              QVariant(QString, "Hello World")
              

              Oh and, Project is delivered class of ModelAbstract. Sorry, my fault

              class ModelAbstract {
              public:
                   ModelAbstract();
              
                   virtual QVariant    getData(QString dataname) const = 0;
              }
              
              class Project  : public ModelAbstract {
              public:
                  virtual Variant    getData(QString dataname) const;
              }
              
              p3c0P Offline
              p3c0P Offline
              p3c0
              Moderators
              wrote on last edited by
              #19

              @illunara So you mean getData should return a QVariantMap ? Is that the problem ? Can you post the definition of getData method ?

              157

              I 1 Reply Last reply
              0
              • p3c0P p3c0

                @illunara So you mean getData should return a QVariantMap ? Is that the problem ? Can you post the definition of getData method ?

                I Offline
                I Offline
                illunara
                wrote on last edited by
                #20

                @p3c0 Sorry for confuse you, but just focus on this

                 ModelAbstract* model = static_cast<ModelAbstract*>(index.internalPointer());
                 qDebug() << model->getData("ItemType");
                

                What i meant here is, the index of styleData.value given in tableviewColumn is wrong. Since the output value is same one item.
                And here is the definition of getData(QString dataname)

                virtual QVariant    getData(QString dataname) const;
                QVariant    Project::getData(QString dataname) const {
                if(dataname == "ItemDisplayName") {
                    QVariantMap returnData;
                    returnData["ItemDisplayName"] = m_name;
                    returnData["ItemType"] = m_type;
                    return returnData;
                } else if(dataname == "ItemType")
                    return "Project";
                else return QVariant();
                }
                

                I also have a Q_INVOKABLE getData(QString dataname) inside QAbstractItemModel class,

                p3c0P 1 Reply Last reply
                0
                • I illunara

                  @p3c0 Sorry for confuse you, but just focus on this

                   ModelAbstract* model = static_cast<ModelAbstract*>(index.internalPointer());
                   qDebug() << model->getData("ItemType");
                  

                  What i meant here is, the index of styleData.value given in tableviewColumn is wrong. Since the output value is same one item.
                  And here is the definition of getData(QString dataname)

                  virtual QVariant    getData(QString dataname) const;
                  QVariant    Project::getData(QString dataname) const {
                  if(dataname == "ItemDisplayName") {
                      QVariantMap returnData;
                      returnData["ItemDisplayName"] = m_name;
                      returnData["ItemType"] = m_type;
                      return returnData;
                  } else if(dataname == "ItemType")
                      return "Project";
                  else return QVariant();
                  }
                  

                  I also have a Q_INVOKABLE getData(QString dataname) inside QAbstractItemModel class,

                  p3c0P Offline
                  p3c0P Offline
                  p3c0
                  Moderators
                  wrote on last edited by
                  #21

                  @illunara According to your earlier code:

                  QVariantMap TreeViewDataModel::get(QModelIndex index) {
                  ModelAbstract* model = static_cast<ModelAbstract*>(index.internalPointer());
                  qDebug() << model->getData("ItemType");
                  return QVariantMap();
                  

                  You are fetching data for "ItemType". And now the definition of getData:

                  virtual QVariant    getData(QString dataname) const;
                  QVariant    Project::getData(QString dataname) const {
                  if(dataname == "ItemDisplayName") {
                      QVariantMap returnData;
                      returnData["ItemDisplayName"] = m_name;
                      returnData["ItemType"] = m_type;
                      return returnData;
                  } else if(dataname == "ItemType")
                      return "Project";
                  else return QVariant();
                  }
                  

                  Isn't it obvious that you will get "Project" always for "ItemType" ?

                  157

                  I 1 Reply Last reply
                  1
                  • p3c0P p3c0

                    @illunara According to your earlier code:

                    QVariantMap TreeViewDataModel::get(QModelIndex index) {
                    ModelAbstract* model = static_cast<ModelAbstract*>(index.internalPointer());
                    qDebug() << model->getData("ItemType");
                    return QVariantMap();
                    

                    You are fetching data for "ItemType". And now the definition of getData:

                    virtual QVariant    getData(QString dataname) const;
                    QVariant    Project::getData(QString dataname) const {
                    if(dataname == "ItemDisplayName") {
                        QVariantMap returnData;
                        returnData["ItemDisplayName"] = m_name;
                        returnData["ItemType"] = m_type;
                        return returnData;
                    } else if(dataname == "ItemType")
                        return "Project";
                    else return QVariant();
                    }
                    

                    Isn't it obvious that you will get "Project" always for "ItemType" ?

                    I Offline
                    I Offline
                    illunara
                    wrote on last edited by illunara
                    #22

                    @p3c0 You are right, my horrible mistake. I think i drunk, should get home now :(
                    I marked this topic as solved, should i some delete needless post too?

                    p3c0P 1 Reply Last reply
                    0
                    • I illunara

                      @p3c0 You are right, my horrible mistake. I think i drunk, should get home now :(
                      I marked this topic as solved, should i some delete needless post too?

                      p3c0P Offline
                      p3c0P Offline
                      p3c0
                      Moderators
                      wrote on last edited by
                      #23

                      @illunara That's fine. No need to delete. It might confuse.

                      157

                      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