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. Syntax for Vector of QPushbuttons added to FlowLayout
Forum Updated to NodeBB v4.3 + New Features

Syntax for Vector of QPushbuttons added to FlowLayout

Scheduled Pinned Locked Moved Solved General and Desktop
52 Posts 6 Posters 5.8k 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.
  • Swati777999S Swati777999

    @Pl45m4 This is the entire code

        FlowLayout *flowLayout = new FlowLayout;
        int n=10;
        QVector <QPushButton> Buttons(n);
    
        for (int ii=0;ii<n;ii++)
        {
            flowLayout->addWidget(new QPushButton[ii]);
    
        }
        setLayout(flowLayout);
    

    This one crashes.

    Pl45m4P Offline
    Pl45m4P Offline
    Pl45m4
    wrote on last edited by Pl45m4
    #5

    @Swati777999 said in Syntax for Vector of QPushbuttons added to FlowLayout:

    FlowLayout *flowLayout = new FlowLayout;
    int n=10;
    QVector <QPushButton> Buttons(n);

    for (int ii=0;ii<n;ii++)
    {
        flowLayout->addWidget(new QPushButton[ii]);
    
    }
    setLayout(flowLayout);
    

    Of course it crashes.
    new QPushButton[ii] can't work.

    So you want your buttons in your vector and then add them to your layout?!

    Change your for-loop to something like this:

    for(int ii =0; ii<n; ii++)
    {
        QPushButton * pb = new QPushButton(); // create 10 Buttons
        buttons.push_back(pb); // add buttons to your qvector
    
       flowLayout->addWidget(pb);
    }
    

    If debugging is the process of removing software bugs, then programming must be the process of putting them in.

    ~E. W. Dijkstra

    Swati777999S 1 Reply Last reply
    2
    • Pl45m4P Pl45m4

      @Swati777999 said in Syntax for Vector of QPushbuttons added to FlowLayout:

      FlowLayout *flowLayout = new FlowLayout;
      int n=10;
      QVector <QPushButton> Buttons(n);

      for (int ii=0;ii<n;ii++)
      {
          flowLayout->addWidget(new QPushButton[ii]);
      
      }
      setLayout(flowLayout);
      

      Of course it crashes.
      new QPushButton[ii] can't work.

      So you want your buttons in your vector and then add them to your layout?!

      Change your for-loop to something like this:

      for(int ii =0; ii<n; ii++)
      {
          QPushButton * pb = new QPushButton(); // create 10 Buttons
          buttons.push_back(pb); // add buttons to your qvector
      
         flowLayout->addWidget(pb);
      }
      
      Swati777999S Offline
      Swati777999S Offline
      Swati777999
      wrote on last edited by Swati777999
      #6

      @Pl45m4 said in Syntax for Vector of QPushbuttons added to FlowLayout:

      > for(int ii =0; ii<n; ii++)
      > {
      >     QPushButton * pb = new QPushButton(); // create 10 Buttons
      >     buttons.push_back(pb); // add buttons to your qvector
      > 
      >    flowLayout->addWidget(pb);
      > }
      

      Thanks for the suggestion, this works perfectly fine.
      From the above code, I observed that some of my pushbuttons are clipped off from the bottom especially when the number of pushbuttons increases. So, I thought of introducing ScrollArea in my codes.

      Here's my code CASE-1

      #include<QScrollArea>
          FlowLayout *flowLayout = new FlowLayout;
          int n=20;
          QVector <QPushButton *> buttons(n);
          QScrollArea *scrollArea = new QScrollArea();
      
          for (int ii=0;ii<n;ii++)
          {
              QPushButton * pb = new QPushButton(); // creating buttons
                scrollArea->setWidget(pb);
      
                 pb->setMinimumSize(200,200);
                 buttons.push_back(pb); // adding buttons to qvector
      
                 flowLayout->addWidget(pb);
          }
      
      

      My program crashes because of it
      scrollArea->setWidget(pb);

      CASE-2

          FlowLayout *flowLayout = new FlowLayout;
          int n=20;
          QVector <QPushButton *> buttons(n);
          QScrollArea *scrollArea = new QScrollArea();
      
          for (int ii=0;ii<n;ii++)
          {
              QPushButton * pb = new QPushButton(); // creating buttons
                
      
                 pb->setMinimumSize(200,200);
                 buttons.push_back(pb); // adding buttons to qvector
      
                 flowLayout->addWidget(pb);
          }
          scrollArea->setWidget(buttons);
      
      

      The program crashes in this case also for obvious reasons.
      scrollArea->setWidget(buttons); --> This statement is outright invalid as buttons is a QVector type not QWidget type.

      Any suggestion to achieve the desired result?

      “ In order to be irreplaceable, one must always be different” – Coco Chanel

      1 Reply Last reply
      0
      • C Offline
        C Offline
        ChrisW67
        wrote on last edited by
        #7

        The primary suggestion is to read the documentation of QScrollArea. It starts:
        "A scroll area is used to display the contents of a child widget within a frame. If the widget exceeds the size of the frame, the view can provide scroll bars so that the entire area of the child widget can be viewed. The child widget must be specified with setWidget()."

        So, it contains and displays a single widget. That widget can contain child widgets in a layout (QGridLayout, QHBoxLayout or whatever). You may have to give the container a specific size depending on the widgetResizable property.
        You want your buttons inside the widget that you place inside the QScrollArea.

        Swati777999S 1 Reply Last reply
        2
        • C ChrisW67

          The primary suggestion is to read the documentation of QScrollArea. It starts:
          "A scroll area is used to display the contents of a child widget within a frame. If the widget exceeds the size of the frame, the view can provide scroll bars so that the entire area of the child widget can be viewed. The child widget must be specified with setWidget()."

          So, it contains and displays a single widget. That widget can contain child widgets in a layout (QGridLayout, QHBoxLayout or whatever). You may have to give the container a specific size depending on the widgetResizable property.
          You want your buttons inside the widget that you place inside the QScrollArea.

          Swati777999S Offline
          Swati777999S Offline
          Swati777999
          wrote on last edited by
          #8

          @ChrisW67 said in Syntax for Vector of QPushbuttons added to FlowLayout:

          The primary suggestion is to read the documentation of QScrollArea. It starts:
          "A scroll area is used to display the contents of a child widget within a frame. If the widget exceeds the size of the frame, the view can provide scroll bars so that the entire area of the child widget can be viewed. The child widget must be specified with setWidget()."

          So, it contains and displays a single widget. That widget can contain child widgets in a layout (QGridLayout, QHBoxLayout or whatever). You may have to give the container a specific size depending on the widgetResizable property.
          You want your buttons inside the widget that you place inside the QScrollArea.

              {
                 FlowLayout *flowLayout = new FlowLayout;
                  int n=20;    
                  QWidget *parentWidget =new QWidget(this);
                  QGridLayout *parentLayout =new QGridLayout(parentWidget);
                  parentWidget->setLayout(parentLayout);
              
                  parentLayout->addLayout(flowLayout,0,0);  //Adding child layout to parentlayout
                  QWidget *childWidget = new QWidget(); //Child Widget for flowLayout
              
                  QVector <QPushButton *> buttons(n);
                  QScrollArea *scrollArea = new QScrollArea();
             
                  for (int ii=0;ii<n;ii++)
              
                  {
              
                      QPushButton * pb = new QPushButton(); // creating button    
                         pb->setMinimumSize(200,200);  
                         buttons.push_back(pb); // adding buttons to qvector
                         flowLayout->addWidget(pb);
                         childWidget->setLayout(flowLayout);
                  }
                  scrollArea->setWidget(childWidget);
                  this->show();
          }
          

          I followed your instructions to modify my code but scrollArea operation does not seem to be working.

          “ In order to be irreplaceable, one must always be different” – Coco Chanel

          JKSHJ 1 Reply Last reply
          0
          • Swati777999S Swati777999

            @ChrisW67 said in Syntax for Vector of QPushbuttons added to FlowLayout:

            The primary suggestion is to read the documentation of QScrollArea. It starts:
            "A scroll area is used to display the contents of a child widget within a frame. If the widget exceeds the size of the frame, the view can provide scroll bars so that the entire area of the child widget can be viewed. The child widget must be specified with setWidget()."

            So, it contains and displays a single widget. That widget can contain child widgets in a layout (QGridLayout, QHBoxLayout or whatever). You may have to give the container a specific size depending on the widgetResizable property.
            You want your buttons inside the widget that you place inside the QScrollArea.

                {
                   FlowLayout *flowLayout = new FlowLayout;
                    int n=20;    
                    QWidget *parentWidget =new QWidget(this);
                    QGridLayout *parentLayout =new QGridLayout(parentWidget);
                    parentWidget->setLayout(parentLayout);
                
                    parentLayout->addLayout(flowLayout,0,0);  //Adding child layout to parentlayout
                    QWidget *childWidget = new QWidget(); //Child Widget for flowLayout
                
                    QVector <QPushButton *> buttons(n);
                    QScrollArea *scrollArea = new QScrollArea();
               
                    for (int ii=0;ii<n;ii++)
                
                    {
                
                        QPushButton * pb = new QPushButton(); // creating button    
                           pb->setMinimumSize(200,200);  
                           buttons.push_back(pb); // adding buttons to qvector
                           flowLayout->addWidget(pb);
                           childWidget->setLayout(flowLayout);
                    }
                    scrollArea->setWidget(childWidget);
                    this->show();
            }
            

            I followed your instructions to modify my code but scrollArea operation does not seem to be working.

            JKSHJ Offline
            JKSHJ Offline
            JKSH
            Moderators
            wrote on last edited by
            #9

            @Swati777999 said in Syntax for Vector of QPushbuttons added to FlowLayout:

            scrollArea operation does not seem to be working.

            You need to add some code that puts scrollArea into this.

            Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

            Swati777999S 2 Replies Last reply
            0
            • JKSHJ JKSH

              @Swati777999 said in Syntax for Vector of QPushbuttons added to FlowLayout:

              scrollArea operation does not seem to be working.

              You need to add some code that puts scrollArea into this.

              Swati777999S Offline
              Swati777999S Offline
              Swati777999
              wrote on last edited by Swati777999
              #10

              @JKSH said in Syntax for Vector of QPushbuttons added to FlowLayout:

              @Swati777999 said in Syntax for Vector of QPushbuttons added to FlowLayout:

              scrollArea operation does not seem to be working.

              You need to add some code that puts scrollArea into this.

              Do you mean that I should write QScrollArea *scrollArea= new QScrollArea(this);

              “ In order to be irreplaceable, one must always be different” – Coco Chanel

              1 Reply Last reply
              0
              • JKSHJ JKSH

                @Swati777999 said in Syntax for Vector of QPushbuttons added to FlowLayout:

                scrollArea operation does not seem to be working.

                You need to add some code that puts scrollArea into this.

                Swati777999S Offline
                Swati777999S Offline
                Swati777999
                wrote on last edited by Swati777999
                #11

                @JKSH
                FlowLayoutDiag.PNG

                This is the diagram of the parent-child items of the above code [expected output in the window]

                So, you mean I should write
                QScrollArea *scrollArea = new QScrollArea(parentWidget);
                My program produces buttons in a vertical layout with deactivated scrollbar functionality.

                “ In order to be irreplaceable, one must always be different” – Coco Chanel

                JKSHJ 1 Reply Last reply
                0
                • Swati777999S Swati777999

                  @JKSH
                  FlowLayoutDiag.PNG

                  This is the diagram of the parent-child items of the above code [expected output in the window]

                  So, you mean I should write
                  QScrollArea *scrollArea = new QScrollArea(parentWidget);
                  My program produces buttons in a vertical layout with deactivated scrollbar functionality.

                  JKSHJ Offline
                  JKSHJ Offline
                  JKSH
                  Moderators
                  wrote on last edited by JKSH
                  #12

                  @Swati777999 said in Syntax for Vector of QPushbuttons added to FlowLayout:

                  So, you mean I should write
                  QScrollArea *scrollArea = new QScrollArea(parentWidget);

                  According to your diagram,

                  • You should add the QPushButtons to flowLayout
                  • You should add flowLayout to ChildWidget
                  • You should add ChildWidget to ParentLayout
                  • You should add ParentLayout to ParentWidget

                  Can you point out to us: Which part of your code achieves each step?

                  Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                  Swati777999S 1 Reply Last reply
                  1
                  • JKSHJ JKSH

                    @Swati777999 said in Syntax for Vector of QPushbuttons added to FlowLayout:

                    So, you mean I should write
                    QScrollArea *scrollArea = new QScrollArea(parentWidget);

                    According to your diagram,

                    • You should add the QPushButtons to flowLayout
                    • You should add flowLayout to ChildWidget
                    • You should add ChildWidget to ParentLayout
                    • You should add ParentLayout to ParentWidget

                    Can you point out to us: Which part of your code achieves each step?

                    Swati777999S Offline
                    Swati777999S Offline
                    Swati777999
                    wrote on last edited by
                    #13

                    @JKSH said in Syntax for Vector of QPushbuttons added to FlowLayout:
                    Find my answers below:
                    You should add the QPushButtons to flowLayout -
                    flowLayout->addWidget(pb); //inside the for loop

                    You should add flowLayout to ChildWidget
                    childWidget->setLayout(flowLayout); // Inside the for loop

                    You should add ChildWidget to ParentLayout
                    Missed this one in the above code but now I have included the following in my code
                    parentLayout->addWidget(childWidget); //Adding childWidget to parent layout
                    After including this code, I am not getting the result. :(

                    You should add ParentLayout to ParentWidget
                    parentWidget->setLayout(parentLayout);

                    “ In order to be irreplaceable, one must always be different” – Coco Chanel

                    JKSHJ 1 Reply Last reply
                    0
                    • Swati777999S Swati777999

                      @JKSH said in Syntax for Vector of QPushbuttons added to FlowLayout:
                      Find my answers below:
                      You should add the QPushButtons to flowLayout -
                      flowLayout->addWidget(pb); //inside the for loop

                      You should add flowLayout to ChildWidget
                      childWidget->setLayout(flowLayout); // Inside the for loop

                      You should add ChildWidget to ParentLayout
                      Missed this one in the above code but now I have included the following in my code
                      parentLayout->addWidget(childWidget); //Adding childWidget to parent layout
                      After including this code, I am not getting the result. :(

                      You should add ParentLayout to ParentWidget
                      parentWidget->setLayout(parentLayout);

                      JKSHJ Offline
                      JKSHJ Offline
                      JKSH
                      Moderators
                      wrote on last edited by JKSH
                      #14

                      @Swati777999 said in Syntax for Vector of QPushbuttons added to FlowLayout:

                      You should add the QPushButtons to flowLayout -
                      flowLayout->addWidget(pb); //inside the for loop

                      You should add flowLayout to ChildWidget
                      childWidget->setLayout(flowLayout); // Inside the for loop

                      You should add ChildWidget to ParentLayout
                      Missed this one in the above code but now I have included the following in my code
                      parentLayout->addWidget(childWidget); //Adding childWidget to parent layout
                      After including this code, I am not getting the result. :(

                      You should add ParentLayout to ParentWidget
                      parentWidget->setLayout(parentLayout);

                      Yep, these are all good. Next:

                      1. Where does QScrollArea fit in your widget hierarchy? (Remember that QScrollArea is a widget)
                      2. Why do you call childWidget->setLayout(flowLayout); multiple times?

                      Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                      Swati777999S 1 Reply Last reply
                      1
                      • JKSHJ JKSH

                        @Swati777999 said in Syntax for Vector of QPushbuttons added to FlowLayout:

                        You should add the QPushButtons to flowLayout -
                        flowLayout->addWidget(pb); //inside the for loop

                        You should add flowLayout to ChildWidget
                        childWidget->setLayout(flowLayout); // Inside the for loop

                        You should add ChildWidget to ParentLayout
                        Missed this one in the above code but now I have included the following in my code
                        parentLayout->addWidget(childWidget); //Adding childWidget to parent layout
                        After including this code, I am not getting the result. :(

                        You should add ParentLayout to ParentWidget
                        parentWidget->setLayout(parentLayout);

                        Yep, these are all good. Next:

                        1. Where does QScrollArea fit in your widget hierarchy? (Remember that QScrollArea is a widget)
                        2. Why do you call childWidget->setLayout(flowLayout); multiple times?
                        Swati777999S Offline
                        Swati777999S Offline
                        Swati777999
                        wrote on last edited by
                        #15

                        @JKSH said in Syntax for Vector of QPushbuttons added to FlowLayout:

                        1. Where does QScrollArea fit in your widget hierarchy? (Remember that QScrollArea is a widget)
                        flowLayout ->addWidget(scrollArea); flowLayout is the child Layout.

                        2. Why do you call childWidget->setLayout(flowLayout); multiple times?
                        It's by mistake I wrote it. childWidget is the widget for flowLayout. Refer the following code.

                            {   int n=20;
                            QWidget *parentWidget =new QWidget(this);
                            QGridLayout *parentLayout =new QGridLayout(parentWidget);
                            parentWidget->setLayout(parentLayout);
                        
                            FlowLayout *flowLayout = new FlowLayout();
                            parentLayout->addLayout(flowLayout,1,0);  //Adding child layout to parentlayout
                        
                        
                            QWidget *childWidget = new QWidget(); //Child Widget for flowLayout
                            parentLayout->addWidget(childWidget); //Adding childWidget to parent layout
                        
                        
                            QVector <QPushButton *> buttons(n);
                            QScrollArea *scrollArea = new QScrollArea(parentWidget);
                            flowLayout ->addWidget(scrollArea);
                        
                        
                            for (int ii=0;ii<n;ii++)
                            {
                                QPushButton * pb = new QPushButton(); // creating buttons
                                   pb->setMinimumSize(200,200);
                                   buttons.push_back(pb); // adding buttons to qvector
                                   flowLayout->addWidget(pb);
                             }
                        
                            childWidget->setLayout(flowLayout);  //setting Layout for the childWidget
                        
                            scrollArea->setWidget(childWidget);
                            scrollArea->widget()->setEnabled(true);
                          
                          this->show();
                        }
                        

                        I get the following result after making the change. I don't know what the first box is.

                        flowLayout_scroll_pushbuttons_15.12.PNG

                        “ In order to be irreplaceable, one must always be different” – Coco Chanel

                        JKSHJ 1 Reply Last reply
                        0
                        • Swati777999S Swati777999

                          @JKSH said in Syntax for Vector of QPushbuttons added to FlowLayout:

                          1. Where does QScrollArea fit in your widget hierarchy? (Remember that QScrollArea is a widget)
                          flowLayout ->addWidget(scrollArea); flowLayout is the child Layout.

                          2. Why do you call childWidget->setLayout(flowLayout); multiple times?
                          It's by mistake I wrote it. childWidget is the widget for flowLayout. Refer the following code.

                              {   int n=20;
                              QWidget *parentWidget =new QWidget(this);
                              QGridLayout *parentLayout =new QGridLayout(parentWidget);
                              parentWidget->setLayout(parentLayout);
                          
                              FlowLayout *flowLayout = new FlowLayout();
                              parentLayout->addLayout(flowLayout,1,0);  //Adding child layout to parentlayout
                          
                          
                              QWidget *childWidget = new QWidget(); //Child Widget for flowLayout
                              parentLayout->addWidget(childWidget); //Adding childWidget to parent layout
                          
                          
                              QVector <QPushButton *> buttons(n);
                              QScrollArea *scrollArea = new QScrollArea(parentWidget);
                              flowLayout ->addWidget(scrollArea);
                          
                          
                              for (int ii=0;ii<n;ii++)
                              {
                                  QPushButton * pb = new QPushButton(); // creating buttons
                                     pb->setMinimumSize(200,200);
                                     buttons.push_back(pb); // adding buttons to qvector
                                     flowLayout->addWidget(pb);
                               }
                          
                              childWidget->setLayout(flowLayout);  //setting Layout for the childWidget
                          
                              scrollArea->setWidget(childWidget);
                              scrollArea->widget()->setEnabled(true);
                            
                            this->show();
                          }
                          

                          I get the following result after making the change. I don't know what the first box is.

                          flowLayout_scroll_pushbuttons_15.12.PNG

                          JKSHJ Offline
                          JKSHJ Offline
                          JKSH
                          Moderators
                          wrote on last edited by
                          #16

                          @Swati777999 said in Syntax for Vector of QPushbuttons added to FlowLayout:

                          1. Where does QScrollArea fit in your widget hierarchy? (Remember that QScrollArea is a widget)
                          flowLayout ->addWidget(scrollArea); flowLayout is the child Layout.

                          Your code puts things in this order:

                          1. scrollArea inside flowLayout
                          2. flowLayout inside childWidget
                          3. childWidget inside scrollArea

                          So which of these objects is meant to be the one "outside"?

                          I suggest you update your diagram and include QScrollArea in the diagram.

                          Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                          Swati777999S 1 Reply Last reply
                          1
                          • JKSHJ JKSH

                            @Swati777999 said in Syntax for Vector of QPushbuttons added to FlowLayout:

                            1. Where does QScrollArea fit in your widget hierarchy? (Remember that QScrollArea is a widget)
                            flowLayout ->addWidget(scrollArea); flowLayout is the child Layout.

                            Your code puts things in this order:

                            1. scrollArea inside flowLayout
                            2. flowLayout inside childWidget
                            3. childWidget inside scrollArea

                            So which of these objects is meant to be the one "outside"?

                            I suggest you update your diagram and include QScrollArea in the diagram.

                            Swati777999S Offline
                            Swati777999S Offline
                            Swati777999
                            wrote on last edited by
                            #17

                            @JKSH said in Syntax for Vector of QPushbuttons added to FlowLayout:

                            So which of these objects is meant to be the one "outside"?
                            I suggest you update your diagram and include QScrollArea in the diagram.

                            Here's the updated diagram for scrollArea, notice that the scrollArea Widget is in pink color.
                            FlowLayoutDiag_scroll.PNG

                            “ In order to be irreplaceable, one must always be different” – Coco Chanel

                            JKSHJ 1 Reply Last reply
                            0
                            • Swati777999S Swati777999

                              @JKSH said in Syntax for Vector of QPushbuttons added to FlowLayout:

                              So which of these objects is meant to be the one "outside"?
                              I suggest you update your diagram and include QScrollArea in the diagram.

                              Here's the updated diagram for scrollArea, notice that the scrollArea Widget is in pink color.
                              FlowLayoutDiag_scroll.PNG

                              JKSHJ Offline
                              JKSHJ Offline
                              JKSH
                              Moderators
                              wrote on last edited by
                              #18

                              @Swati777999 said in Syntax for Vector of QPushbuttons added to FlowLayout:

                              Here's the updated diagram for scrollArea, notice that the scrollArea Widget is in pink color.

                              • According to your diagram, scrollArea is inside childWidget
                              • According to your code, childWidget is inside scrollArea.

                              Which one is correct?

                              Notes:

                              • I said this before: QScrollArea is a QWidget. You can't put a QScrollArea between your FlowLayout and your buttons.
                              • In case it's not obvious: QPushButton is also a QWidget.
                              • Your design is extremely complicated. I suggest you reduce the number of widgets and layouts.

                              Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                              Swati777999S 1 Reply Last reply
                              2
                              • JKSHJ JKSH

                                @Swati777999 said in Syntax for Vector of QPushbuttons added to FlowLayout:

                                Here's the updated diagram for scrollArea, notice that the scrollArea Widget is in pink color.

                                • According to your diagram, scrollArea is inside childWidget
                                • According to your code, childWidget is inside scrollArea.

                                Which one is correct?

                                Notes:

                                • I said this before: QScrollArea is a QWidget. You can't put a QScrollArea between your FlowLayout and your buttons.
                                • In case it's not obvious: QPushButton is also a QWidget.
                                • Your design is extremely complicated. I suggest you reduce the number of widgets and layouts.
                                Swati777999S Offline
                                Swati777999S Offline
                                Swati777999
                                wrote on last edited by
                                #19

                                @JKSH

                                I want to set the scrolling functionality for the array of pushbuttons. That's the reason why I put scrollArea inside the flowLayout.

                                “ In order to be irreplaceable, one must always be different” – Coco Chanel

                                Pl45m4P JKSHJ 2 Replies Last reply
                                0
                                • Swati777999S Swati777999

                                  @JKSH

                                  I want to set the scrolling functionality for the array of pushbuttons. That's the reason why I put scrollArea inside the flowLayout.

                                  Pl45m4P Offline
                                  Pl45m4P Offline
                                  Pl45m4
                                  wrote on last edited by
                                  #20

                                  @Swati777999

                                  And where do you want to have your flowLayout?
                                  Your design is really confusing.

                                  How about putting a widget with a flowLayout containing your buttons in your ScrollArea?!
                                  Still don't know if that is what you are trying to achieve.
                                  From you figure, it looks like you have a least 1 or 2 (parent) widgets and layouts more than necessarily needed.


                                  If debugging is the process of removing software bugs, then programming must be the process of putting them in.

                                  ~E. W. Dijkstra

                                  Swati777999S 1 Reply Last reply
                                  1
                                  • Swati777999S Swati777999

                                    @JKSH

                                    I want to set the scrolling functionality for the array of pushbuttons. That's the reason why I put scrollArea inside the flowLayout.

                                    JKSHJ Offline
                                    JKSHJ Offline
                                    JKSH
                                    Moderators
                                    wrote on last edited by JKSH
                                    #21

                                    @Swati777999 said in Syntax for Vector of QPushbuttons added to FlowLayout:

                                    I want to set the scrolling functionality for the array of pushbuttons. That's the reason why I put scrollArea inside the flowLayout.

                                    Then you should:

                                    1. Put the flowLayout in a container/child widget
                                    2. Put that container/child widget in the scrollArea

                                    But before that, simplify your design and remove the widgets and layouts that you don't need. Both myself and @Pl45m4 have asked you to do this. Please don't ignore our words.

                                    Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                                    Swati777999S 1 Reply Last reply
                                    4
                                    • Pl45m4P Pl45m4

                                      @Swati777999

                                      And where do you want to have your flowLayout?
                                      Your design is really confusing.

                                      How about putting a widget with a flowLayout containing your buttons in your ScrollArea?!
                                      Still don't know if that is what you are trying to achieve.
                                      From you figure, it looks like you have a least 1 or 2 (parent) widgets and layouts more than necessarily needed.

                                      Swati777999S Offline
                                      Swati777999S Offline
                                      Swati777999
                                      wrote on last edited by Swati777999
                                      #22

                                      @Pl45m4 said in Syntax for Vector of QPushbuttons added to FlowLayout:

                                      How about putting a widget with a flowLayout containing your buttons in your ScrollArea?!

                                      I don't know if my layout design is the correct one. I should be able to navigate to the buttons at the bottom from the top buttons by scrolling. This is my objective. How can it be achieved?

                                      “ In order to be irreplaceable, one must always be different” – Coco Chanel

                                      1 Reply Last reply
                                      0
                                      • JKSHJ JKSH

                                        @Swati777999 said in Syntax for Vector of QPushbuttons added to FlowLayout:

                                        I want to set the scrolling functionality for the array of pushbuttons. That's the reason why I put scrollArea inside the flowLayout.

                                        Then you should:

                                        1. Put the flowLayout in a container/child widget
                                        2. Put that container/child widget in the scrollArea

                                        But before that, simplify your design and remove the widgets and layouts that you don't need. Both myself and @Pl45m4 have asked you to do this. Please don't ignore our words.

                                        Swati777999S Offline
                                        Swati777999S Offline
                                        Swati777999
                                        wrote on last edited by Swati777999
                                        #23

                                        @JKSH and @Pl45m4

                                        Yes, check the revised code as below:

                                        {
                                        QWidget *flowWidget = new QWidget(this);
                                        FlowLayout *flowLayout = new FlowLayout();
                                        flowWidget->setLayout(flowLayout);
                                        int n=20;
                                        QVector <QPushButton *> buttons(n);
                                        
                                        for (int ii=0;ii<n;ii++)
                                        {
                                              QPushButton * pb = new QPushButton(); // creating buttons
                                               pb->setMinimumSize(200,200);
                                               buttons.push_back(pb); // adding buttons to qvector
                                               flowLayout->addWidget(pb);
                                        }
                                        
                                        QScrollArea *scroll =new QScrollArea(this);
                                        scroll->setWidget(flowWidget);
                                         this->show();
                                        }
                                        

                                        It gives me following output :
                                        Program-1-17.12.PNG
                                        scrollArea inside another window .

                                        If I declare scroll widget as below:
                                        QScrollArea *scroll =new QScrollArea();
                                        I get a blank window.

                                        If I declare scroll widget as follows:
                                        QScrollArea *scroll =new QScrollArea(flowWidget);
                                        my program crashes.

                                        “ In order to be irreplaceable, one must always be different” – Coco Chanel

                                        JKSHJ 1 Reply Last reply
                                        0
                                        • Swati777999S Swati777999

                                          @JKSH and @Pl45m4

                                          Yes, check the revised code as below:

                                          {
                                          QWidget *flowWidget = new QWidget(this);
                                          FlowLayout *flowLayout = new FlowLayout();
                                          flowWidget->setLayout(flowLayout);
                                          int n=20;
                                          QVector <QPushButton *> buttons(n);
                                          
                                          for (int ii=0;ii<n;ii++)
                                          {
                                                QPushButton * pb = new QPushButton(); // creating buttons
                                                 pb->setMinimumSize(200,200);
                                                 buttons.push_back(pb); // adding buttons to qvector
                                                 flowLayout->addWidget(pb);
                                          }
                                          
                                          QScrollArea *scroll =new QScrollArea(this);
                                          scroll->setWidget(flowWidget);
                                           this->show();
                                          }
                                          

                                          It gives me following output :
                                          Program-1-17.12.PNG
                                          scrollArea inside another window .

                                          If I declare scroll widget as below:
                                          QScrollArea *scroll =new QScrollArea();
                                          I get a blank window.

                                          If I declare scroll widget as follows:
                                          QScrollArea *scroll =new QScrollArea(flowWidget);
                                          my program crashes.

                                          JKSHJ Offline
                                          JKSHJ Offline
                                          JKSH
                                          Moderators
                                          wrote on last edited by
                                          #24

                                          @Swati777999 said in Syntax for Vector of QPushbuttons added to FlowLayout:

                                          Yes, check the revised code as below:

                                          Good! It is much cleaner now.

                                          scrollArea inside another window .

                                          That's because your scrollArea is a child widget but you did not put it inside a layout.

                                          Questions:

                                          1. In your latest code, who is scrollArea's parent?
                                          2. Do you need scrollArea to be a child widget? In other words, does scrollArea need a parent?
                                          3. How would you make scrollArea a top-level widget?

                                          Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                                          Swati777999S 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