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. (Un)ChechkingAll from Tree View
Forum Updated to NodeBB v4.3 + New Features

(Un)ChechkingAll from Tree View

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
28 Posts 3 Posters 4.2k 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.
  • Karoluss96K Offline
    Karoluss96K Offline
    Karoluss96
    wrote on last edited by
    #1

    Hi Everyone,
    I have a problem with functions in buttons that can check or uncheck (2 seperate buttons) all Checkboxes from TreeView.
    I totaly don't how to gain data from treeView to button functions.

    I've tried some versions with self.dlg.checkBox oraz QStrandardItem, but none of the works.

    I need to do it for my project for QGIS qml add-in plugin. So that attached code is in Python

    def CheckAll(self):
            checkBoxList  =self.dlg.checkBox#or if self.dlg.checkBox.isChecked() 
            print(checkBoxList) #to control how does looks like
            for checks in checkBoxList:
                if  checkBoxList.CheckState():
                    checkBoxList.setCheckState(Qt.Checked)
                    print(checkBoxList)
            #for checks in checkBoxList:
           #     checks.setChecked(checked)#or child.setCheckState(Qt.Checked)
    
        def UnCheckedAll(self):
            checkBoxList  = self.dlg.checkBox
            if  checkBoxList.isChecked() == True:
                checkBoxList.setCheckState(Qt.Unchecked)#or child.setCheckState(Qt.Unchecked)
                print(checkBoxList)
    

    Tree View is loaded by a different function above

    for group in root:
                parent = QStandardItem(group.get('name')) 
                model.appendRow(parent)
                parent.setCheckable(True)
                parent.setCheckState(Qt.Checked)
                parent.setUserTristate(True)#also need to develop
                for control in group:
                    child = QStandardItem(control.get('name'))
                    child.setCheckable(True)
                    child.setCheckState(Qt.Checked)
                    parent.appendRow([child])
                self.dlg.treeView.setFirstColumnSpanned(i, self.dlg.treeView.rootIndex(), True)
                i = i + 1   
            self.dlg.treeView.show()
    

    Thanks for every kind of help

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi and welcome to devnet,

      You do not need the view for that, use the model directly.

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • Karoluss96K Offline
        Karoluss96K Offline
        Karoluss96
        wrote on last edited by
        #3

        Can you explain what do you mean by 'model directly'?

        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #4

          Based on the fact that you are using QStandardItem, it means that you are populating a QStandardItemModel. My suggestion is that you use that QStandardItemModel directly and go through all the items you want/need to modify their value.

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          1
          • Karoluss96K Offline
            Karoluss96K Offline
            Karoluss96
            wrote on last edited by
            #5

            @SGaist said in (Un)ChechkingAll from Tree View:

            QStandardItemModel

            OK,
            I put in CheckAll:

            x= QStandardItemModel()
                   print(x) 
                   y= x.modelItem()
                   print (y) 
            
            

            and... how to put here the checkboxes?

            1 Reply Last reply
            0
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by
              #6

              You don't put checkboxes in the model.

              In your original code snippet you are correctly making the item checkable. This will trigger the view to show checkboxes. When you want to change them all, go through all the items in your model and call setCheckState on them.

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              Karoluss96K 1 Reply Last reply
              0
              • Karoluss96K Offline
                Karoluss96K Offline
                Karoluss96
                wrote on last edited by
                #7

                I change modelItem to takeItem, but stil didn't catch checkboxes form treeView

                JonBJ 1 Reply Last reply
                0
                • Karoluss96K Karoluss96

                  I change modelItem to takeItem, but stil didn't catch checkboxes form treeView

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

                  @Karoluss96 said in (Un)ChechkingAll from Tree View:

                  I change modelItem to takeItem

                  Why, and what do you expect this to achieve? @SGaist said you should call setCheckState() on each QStandardItem, what about that?

                  1 Reply Last reply
                  0
                  • SGaistS SGaist

                    You don't put checkboxes in the model.

                    In your original code snippet you are correctly making the item checkable. This will trigger the view to show checkboxes. When you want to change them all, go through all the items in your model and call setCheckState on them.

                    Karoluss96K Offline
                    Karoluss96K Offline
                    Karoluss96
                    wrote on last edited by
                    #9

                    Now i have in function checkall that:

                    checkBoxList= QStandardItem() 
                     checkBoxList.setCheckState(Qt.Checked)
                    

                    no error, but when I unchecked some boxes in TreeView they don't chacked after cliking this button

                    JonBJ 1 Reply Last reply
                    0
                    • Karoluss96K Karoluss96

                      Now i have in function checkall that:

                      checkBoxList= QStandardItem() 
                       checkBoxList.setCheckState(Qt.Checked)
                      

                      no error, but when I unchecked some boxes in TreeView they don't chacked after cliking this button

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

                      @Karoluss96
                      Why would you name a single QStandardItem() as checkBoxList? Won't that just confuse you and me?

                      You seem to be creating a QStandardItem into a local variable. I really don't know what you are doing with that item, if anything. You are supposed to be calling setCheckState() on each item in your model, which is what the view is displaying.

                      While I notice it, you showed originally:

                              for checks in checkBoxList:
                                  if  checkBoxList.CheckState():
                                      checkBoxList.setCheckState(Qt.Checked)
                                      print(checkBoxList)
                      

                      What is the point of a for checks in checkBoxList loop if you only access checkBoxList inside it?

                      1 Reply Last reply
                      0
                      • Karoluss96K Offline
                        Karoluss96K Offline
                        Karoluss96
                        wrote on last edited by Karoluss96
                        #11

                        I need an access for data in tree View, which is make in a different function.
                        I'll show on attached photo: Przechwytywanie.PNG
                        is in polish so: "zaznacz wszystko"="check all"
                        odznacz wszystko ="un check all".
                        Right, I thought that loop will be better, but all times
                        but I have an error: " 'QStandardItem' object is not iterable"

                        JonBJ 1 Reply Last reply
                        0
                        • Karoluss96K Karoluss96

                          I need an access for data in tree View, which is make in a different function.
                          I'll show on attached photo: Przechwytywanie.PNG
                          is in polish so: "zaznacz wszystko"="check all"
                          odznacz wszystko ="un check all".
                          Right, I thought that loop will be better, but all times
                          but I have an error: " 'QStandardItem' object is not iterable"

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

                          @Karoluss96 said in (Un)ChechkingAll from Tree View:

                          but I have an error: " 'QStandardItem' object is not iterable"

                          Exactly, it is not. If a single QStandardItem, or a single checkbox, is named checkBoxList it's not helpful. There is no list and nothing to loop over.

                          I don't know what to say that @SGaist has not stated clearly in:

                          My suggestion is that you use that QStandardItemModel directly and go through all the items you want/need to modify their value.

                          calling setCheckState(Qt.Checked) on each item.

                          1 Reply Last reply
                          0
                          • Karoluss96K Offline
                            Karoluss96K Offline
                            Karoluss96
                            wrote on last edited by
                            #13

                            yes, the variable name 'checkBoxList' is confusing, but it doesn't matter for that I need a loop for all Checkboxes as I shown in the print screen above

                            JonBJ 1 Reply Last reply
                            0
                            • Karoluss96K Karoluss96

                              yes, the variable name 'checkBoxList' is confusing, but it doesn't matter for that I need a loop for all Checkboxes as I shown in the print screen above

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

                              @Karoluss96 said in (Un)ChechkingAll from Tree View:

                              yes, the variable name 'checkBoxList' is confusing,

                              Then change it, and get rid of " " 'QStandardItem' object is not iterable"" error.

                              I need a loop for all Checkboxes as I shown in the print screen above

                              And I referred you to @SGaist's answer to that, which is what you need to do.

                              1 Reply Last reply
                              0
                              • Karoluss96K Offline
                                Karoluss96K Offline
                                Karoluss96
                                wrote on last edited by
                                #15

                                @JonB said in (Un)ChechkingAll from Tree View:

                                @SGaist can you explain more what do you mean?

                                JonBJ 1 Reply Last reply
                                0
                                • Karoluss96K Karoluss96

                                  @JonB said in (Un)ChechkingAll from Tree View:

                                  @SGaist can you explain more what do you mean?

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

                                  @Karoluss96

                                  @SGaist said in (Un)ChechkingAll from Tree View:

                                  When you want to change them all, go through all the items in your model and call setCheckState on them.

                                  1. Do you know how to go through all the items/rows in your model? Suppose you wanted to print out (or change) the text of each item, like Kontrola atrybutowe, Kontrola 1, Kontrola 2, etc. How would you do that?

                                  2. Once you have the loop for 1, presumably you know how to call setCheckState(Qt.Checked) on each item visited.

                                  1 Reply Last reply
                                  1
                                  • Karoluss96K Offline
                                    Karoluss96K Offline
                                    Karoluss96
                                    wrote on last edited by Karoluss96
                                    #17
                                    1. If put print (QStandardItemModel()) I gain: <PyQt5.QtGui.QStandardItemModel object at 0x00000229EA8F7160>
                                      all data in Tree View come from parsed xml (to variable tree) file (I can't publish them), by
                                    root = tree.getroot() 
                                    

                                    and later

                                    for grupaKontroli in root:
                                                parent = QStandardItem(grupaKontroli.get('name')) 
                                                QStandardItemModel.appendRow(parent)
                                                parent.setCheckable(True)
                                                setCheckState(Qt.Checked)
                                    
                                    1. Answer for that is in function above

                                    This function in the end of main post

                                    JonBJ 1 Reply Last reply
                                    0
                                    • Karoluss96K Karoluss96
                                      1. If put print (QStandardItemModel()) I gain: <PyQt5.QtGui.QStandardItemModel object at 0x00000229EA8F7160>
                                        all data in Tree View come from parsed xml (to variable tree) file (I can't publish them), by
                                      root = tree.getroot() 
                                      

                                      and later

                                      for grupaKontroli in root:
                                                  parent = QStandardItem(grupaKontroli.get('name')) 
                                                  QStandardItemModel.appendRow(parent)
                                                  parent.setCheckable(True)
                                                  setCheckState(Qt.Checked)
                                      
                                      1. Answer for that is in function above

                                      This function in the end of main post

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

                                      @Karoluss96
                                      No. I'm afraid you do not seem to have a grasp of models/what is going on. You might benefit from reading up on this in the documentation.

                                      The answer to, for example, how do I set every checkbox in my model would be:

                                      for i in range(model.rowCount()):
                                          model.item(i).setCheckState(Qt.Checked)
                                      

                                      If you want to only check items in and below some one particular node you would need to recurse down its descendants. But you asked for check every item.

                                      1 Reply Last reply
                                      0
                                      • Karoluss96K Offline
                                        Karoluss96K Offline
                                        Karoluss96
                                        wrote on last edited by
                                        #19

                                        Looks useful, pretty and short, but I still didn't see its results- It need to take data from treeView!

                                        JonBJ 1 Reply Last reply
                                        0
                                        • Karoluss96K Karoluss96

                                          Looks useful, pretty and short, but I still didn't see its results- It need to take data from treeView!

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

                                          @Karoluss96 said in (Un)ChechkingAll from Tree View:

                                          It need to take data from treeView!

                                          A QTreeView does not store any data. It's a view onto a model. The model is where you store the data. @SGaist has said this, I have said this. I suggested you might like to read up on Qt model/view architecture.

                                          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