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.
  • 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