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. Search and select item in QTreeWidget based on Search String
Forum Updated to NodeBB v4.3 + New Features

Search and select item in QTreeWidget based on Search String

Scheduled Pinned Locked Moved Solved General and Desktop
19 Posts 6 Posters 6.1k Views 3 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.
  • mrjjM mrjj

    Hi
    So it colored all items ???

    M Offline
    M Offline
    MostafaEzzat
    wrote on last edited by MostafaEzzat
    #9

    @mrjj

    Yes it colored all the items after i delete and rewrite in QLineEdit so i guess as you said it needs also for loop to delete the highlight but i guess it will not be elegent i just need multiple selection like (I mean the way of selection) of

    •     ui->treeWidget_Medicine->setCurrentItem(item,0);
      

    that when i search for something highlight the normal like

    • setCurrentItem

    Thanks in Advance appreciate

    mrjjM 1 Reply Last reply
    0
    • M MostafaEzzat

      @mrjj

      Yes it colored all the items after i delete and rewrite in QLineEdit so i guess as you said it needs also for loop to delete the highlight but i guess it will not be elegent i just need multiple selection like (I mean the way of selection) of

      •     ui->treeWidget_Medicine->setCurrentItem(item,0);
        

      that when i search for something highlight the normal like

      • setCurrentItem

      Thanks in Advance appreciate

      mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by mrjj
      #10

      @MostafaEzzat
      Hi
      Ah yes if you dont clear the background before each search that will happen.

      Im not sure how we can do when its a TreeWidget as the function we need is protected

      https://doc.qt.io/qt-5/qtreewidget.html#indexFromItem

      so we could do

      
            auto sel = ui->treeWidget->selectionModel();
            for(QTreeWidgetItem* item: clist)
            {
             QModelIndex index = ui->treeWidget->indexFromItem(item,0);
             sel->select(index) ;
            }
      
      

      So you would need to subclass your TreeWidget to do this.

      M 1 Reply Last reply
      0
      • mrjjM mrjj

        @MostafaEzzat
        Hi
        Ah yes if you dont clear the background before each search that will happen.

        Im not sure how we can do when its a TreeWidget as the function we need is protected

        https://doc.qt.io/qt-5/qtreewidget.html#indexFromItem

        so we could do

        
              auto sel = ui->treeWidget->selectionModel();
              for(QTreeWidgetItem* item: clist)
              {
               QModelIndex index = ui->treeWidget->indexFromItem(item,0);
               sel->select(index) ;
              }
        
        

        So you would need to subclass your TreeWidget to do this.

        M Offline
        M Offline
        MostafaEzzat
        wrote on last edited by
        #11

        @mrjj

        I inherted QTreeWidget like this and still gives me it's protected or do you think i should rewrite QModel Index file to inhert QTreeWidgetItem in it

        class Profile3 : public QWidget , public QTreeWidgetItem , public QModelIndex
        {
        
        
        • D:\New folder\Hospitaal\profile3.cpp:360: error: 'QModelIndex QTreeWidget::indexFromItem(QTreeWidgetItem*, int) const' is protected within this context

        • ..\Hospitaal\profile3.cpp: In member function 'void Profile3::on_lineEdit_textEdited(const QString&)':

        • ..\Hospitaal\profile3.cpp:360:71: error: 'QModelIndex QTreeWidget::indexFromItem(QTreeWidgetItem*, int) const' is protected within this context

        •   QModelIndex index = ui->treeWidget_Medicine->indexFromItem(item,0);
          
        • D:\New folder\Hospitaal\profile3.cpp:361: error: no matching function for call to 'QItemSelectionModel::select(QModelIndex&)'

        • ..\Hospitaal\profile3.cpp:361:23: error: no matching function for call to 'QItemSelectionModel::select(QModelIndex&)'

        •   sel->select(index) ;
          
        mrjjM 1 Reply Last reply
        0
        • M MostafaEzzat

          @mrjj

          I inherted QTreeWidget like this and still gives me it's protected or do you think i should rewrite QModel Index file to inhert QTreeWidgetItem in it

          class Profile3 : public QWidget , public QTreeWidgetItem , public QModelIndex
          {
          
          
          • D:\New folder\Hospitaal\profile3.cpp:360: error: 'QModelIndex QTreeWidget::indexFromItem(QTreeWidgetItem*, int) const' is protected within this context

          • ..\Hospitaal\profile3.cpp: In member function 'void Profile3::on_lineEdit_textEdited(const QString&)':

          • ..\Hospitaal\profile3.cpp:360:71: error: 'QModelIndex QTreeWidget::indexFromItem(QTreeWidgetItem*, int) const' is protected within this context

          •   QModelIndex index = ui->treeWidget_Medicine->indexFromItem(item,0);
            
          • D:\New folder\Hospitaal\profile3.cpp:361: error: no matching function for call to 'QItemSelectionModel::select(QModelIndex&)'

          • ..\Hospitaal\profile3.cpp:361:23: error: no matching function for call to 'QItemSelectionModel::select(QModelIndex&)'

          •   sel->select(index) ;
            
          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by mrjj
          #12

          @MostafaEzzat
          Hi
          Ehh that is nothing like I expected. o.O

          You need a subclassed TreeWidget like code below
          and use that instead of the standard one.

          class MyTreeWidget : public QTreeWidget
          {
              Q_OBJECT
          public:
              explicit MyTreeWidget(QWidget *parent = nullptr) : QTreeWidget(parent)
              {
          
              }
          
              void DoSearch(QString term) {
          
                  QList<QTreeWidgetItem *> clist = findItems(term,Qt::MatchContains | Qt::MatchRecursive, 0);
          
                  auto sel = selectionModel();
                  for (QTreeWidgetItem *item : clist) {
                      QModelIndex index = indexFromItem(item, 0);
                      sel->select(index,  QItemSelectionModel::Select) ;
                  }
          
              }
          
          };
          
          and use your new DoSearch
          
          ui->treeWidget->selectionModel()->clear(); // get rid of old selection
          ui->treeWidget->DoSearch(ui->lineEdit->text());
          

          Then it will select them
          alt text

          Test Project
          https://www.dropbox.com/s/zu5tc2hobdwt56i/justDefualt.zip?dl=0

          Do note. I used the promotion feature of Creator to replace the normal one with my subclassed one.
          That is why you dont see code that goes
          MyTreeWidget * tree = new MyTreeWidget(this);
          To insert into main form.

          M 1 Reply Last reply
          2
          • mrjjM mrjj

            @MostafaEzzat
            Hi
            Ehh that is nothing like I expected. o.O

            You need a subclassed TreeWidget like code below
            and use that instead of the standard one.

            class MyTreeWidget : public QTreeWidget
            {
                Q_OBJECT
            public:
                explicit MyTreeWidget(QWidget *parent = nullptr) : QTreeWidget(parent)
                {
            
                }
            
                void DoSearch(QString term) {
            
                    QList<QTreeWidgetItem *> clist = findItems(term,Qt::MatchContains | Qt::MatchRecursive, 0);
            
                    auto sel = selectionModel();
                    for (QTreeWidgetItem *item : clist) {
                        QModelIndex index = indexFromItem(item, 0);
                        sel->select(index,  QItemSelectionModel::Select) ;
                    }
            
                }
            
            };
            
            and use your new DoSearch
            
            ui->treeWidget->selectionModel()->clear(); // get rid of old selection
            ui->treeWidget->DoSearch(ui->lineEdit->text());
            

            Then it will select them
            alt text

            Test Project
            https://www.dropbox.com/s/zu5tc2hobdwt56i/justDefualt.zip?dl=0

            Do note. I used the promotion feature of Creator to replace the normal one with my subclassed one.
            That is why you dont see code that goes
            MyTreeWidget * tree = new MyTreeWidget(this);
            To insert into main form.

            M Offline
            M Offline
            MostafaEzzat
            wrote on last edited by
            #13
            This post is deleted!
            M 1 Reply Last reply
            0
            • M MostafaEzzat

              This post is deleted!

              M Offline
              M Offline
              MostafaEzzat
              wrote on last edited by
              #14
              This post is deleted!
              1 Reply Last reply
              0
              • M Offline
                M Offline
                MostafaEzzat
                wrote on last edited by
                #15

                @mrjj

                Thanks i got it after a while , it works very well

                Appreciated

                mrjjM 1 Reply Last reply
                1
                • M MostafaEzzat

                  @mrjj

                  Thanks i got it after a while , it works very well

                  Appreciated

                  mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by
                  #16

                  @MostafaEzzat
                  Good to hear :)

                  1 Reply Last reply
                  0
                  • J Offline
                    J Offline
                    John H. BROOKS
                    wrote on last edited by
                    #17

                    Please Sir, it's almost a month I'm trying to know how to return a big text (10MB) in QTextWidget or in any suitable widget you would suject
                    (I'm trying to work on a similar project like esword, see here link text)

                    JonBJ 1 Reply Last reply
                    0
                    • J John H. BROOKS

                      Please Sir, it's almost a month I'm trying to know how to return a big text (10MB) in QTextWidget or in any suitable widget you would suject
                      (I'm trying to work on a similar project like esword, see here link text)

                      JonBJ Offline
                      JonBJ Offline
                      JonB
                      wrote on last edited by
                      #18

                      @John-H-BROOKS
                      Hello and welcome.

                      Open your own new thread with your question, it is different from this topic. Describe what you are trying to do and what the issues are.

                      O 1 Reply Last reply
                      1
                      • JonBJ JonB

                        @John-H-BROOKS
                        Hello and welcome.

                        Open your own new thread with your question, it is different from this topic. Describe what you are trying to do and what the issues are.

                        O Offline
                        O Offline
                        OdinUci
                        wrote on last edited by
                        #19

                        @Jmrjj please how can I make a filter to a tree

                        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