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. QSortFilterProxyModel -filterAcceptsRow()- filter parent Node and child Node
Forum Updated to NodeBB v4.3 + New Features

QSortFilterProxyModel -filterAcceptsRow()- filter parent Node and child Node

Scheduled Pinned Locked Moved General and Desktop
28 Posts 8 Posters 32.5k 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
    ManasQt
    wrote on last edited by
    #18

    Hi xcround,
    I think in your case it would be some thing like this needs to be......
    ( i am not a c/c++ guy)
    @
    bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent)
    {
    ....
    if (!action.isEmpty())
    {
    if (QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent))
    {
    return true
    }
    return hasAcceptedChildren(sourceRow, sourceParent)
    }
    .........
    }

    bool TableProxy::hasAcceptedChildren(int source_row, const QModelIndex &source_parent) const
    {
    QModelIndex item = source_parent;
    if (!item.isValid())
    {
    qDebug() << "item invalid" << source_parent.data().toString() << source_row;
    return false;
    }
    int childCount = item.model()->rowCount(item);

    if (childCount == 0)
        return false;
    
    for (int i = 0; i < childCount; ++i)
    {
        if (filterAcceptsRow(i, item))
            return true;
    }
    
    return false;
    

    }@

    1 Reply Last reply
    0
    • X Offline
      X Offline
      xcround
      wrote on last edited by
      #19

      Sorry but from mine understanding I first need to check if the string matches the one I'm looking for.
      So that's why I have the first if statement, and then I do what you said in the previous post.
      @
      f (!action.isEmpty())
      {
      QModelIndex index = sourceModel()->index(sourceRow,
      ACTION, sourceParent);

              if (action != sourceModel()->data(index).toString())
                  return false;
      
              if ((QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent)))
                  return true;
      
              return hasAcceptedChildren(sourceRow, sourceParent);
          }
      

      @
      Still trying to understand whats going wrong.

      1 Reply Last reply
      0
      • B Offline
        B Offline
        burgerking
        wrote on last edited by
        #20

        Hi qties,

        at the first time I read the post from André I was so happy to find the solution I am searching for.
        But unfortunately I am to stupid to get it work. Maybe you can help me.

        If I use the standard QSortFilterProxyModel everything works good except the search at textChanged Signal.
        But if I use the LeafFilterProxyModel (exactly as André has post it) an error occurs and I do not know what it means.

        I hope somebady can help me.
        Thank you.

        @
        LeafFilterProxyModel m_oProxyModel;
        //QSortFilterProxyModel m_oProxyModel;
        QStandardItemModel m_oItemModel; // manualy filled

        m_oProxyModel.setSourceModel(&m_oItemModel);
        m_tvDBC->setModel(&m_oProxyModel); // TreeView
        m_lvDBC->setModel(&m_oStringModel); // ListView
        @

        @
        void cClass::textChanged(QString text)
        {
        QRegExp::PatternSyntax pSyntax = QRegExp::PatternSyntax(QRegExp::FixedString);
        QRegExp regExp(text, Qt::CaseInsensitive, pSyntax);

        m_oProxyModel.setFilterRegExp(regExp);
        m_oProxyModel.setFilterKeyColumn(-1);
        }
        @

        @
        Error 1 error LNK2001: unresolved external symbol "public: __thiscall
        LeafFilterProxyModel::LeafFilterProxyModel(class QObject *)"
        ??0LeafFilterProxyModel@@QAE@PAVQObject@@@Z) myobject.obj
        @

        1 Reply Last reply
        0
        • A Offline
          A Offline
          andre
          wrote on last edited by
          #21

          Sounds like you forgot to add the .h file to your HEADERS section in your .pro file, and the .cpp file to the SOURCES section?

          1 Reply Last reply
          0
          • R Offline
            R Offline
            Ruzik
            wrote on last edited by
            #22

            What does _parent type in this string?
            @bool filterAcceptsRow(int source_row, const QModelIndex &source;_parent) const;@
            And wath does this argument do?
            And second question:
            source_parent is source->parent()?
            And in advance sorry for stupid questions)

            1 Reply Last reply
            0
            • A Offline
              A Offline
              andre
              wrote on last edited by
              #23

              There was an unfortunate bug at the time in DevNet, that sometimes inserted ; at the wrong places in code sections. The code listing I posted suffered from this. The argument is supposed to be a single argument source_parent. I'll try to fixup the original posting. Thanks for noticing.

              1 Reply Last reply
              0
              • R Offline
                R Offline
                Ruzik
                wrote on last edited by
                #24

                It is clear.
                One more thank you for your help!

                1 Reply Last reply
                0
                • F Offline
                  F Offline
                  frankiefrank
                  wrote on last edited by
                  #25

                  Thank you - this thread has been really helpful!

                  "Roads? Where we're going, we don't need roads."

                  1 Reply Last reply
                  0
                  • B Offline
                    B Offline
                    bycross028
                    wrote on last edited by
                    #26

                    Esta implementación recorre todo los sub-Nodos del padre buscando que el filterRegExp coincida con el Qt::DisplayRole del sub-Nodo.

                    El algoritmo no utiliza recursividad :D

                    @bool SortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
                    {
                    QList<QModelIndex> children;
                    children << sourceModel()->index(source_row, 0, source_parent);

                    bool show = false;
                    for(int i = 0; i < children.length(); i++)
                    {
                        if(show) break;
                    
                        // Add sub Nodos
                        //
                        for(int c = 0; c < sourceModel()->rowCount(children[i]) ;c++)
                            children.append(children[i].child(c,0));
                    
                        QString type = sourceModel()->data(children[i], Qt::DisplayRole).toString();
                        show = type.contains(filterRegExp());        
                    }
                    return show;
                    

                    }@

                    1 Reply Last reply
                    0
                    • A Offline
                      A Offline
                      andre
                      wrote on last edited by
                      #27

                      Could you keep posts to English in this forum please? There are specialized sub-forums for other languages.

                      1 Reply Last reply
                      0
                      • A Offline
                        A Offline
                        andre
                        wrote on last edited by
                        #28

                        Could you keep posts to English in this forum please? There are specialized sub-forums for other languages.

                        1 Reply Last reply
                        0
                        • P pchar2 referenced this topic on
                        • P pchar2 referenced this topic on

                        • Login

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