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
QtWS25 Last Chance

Syntax for Vector of QPushbuttons added to FlowLayout

Scheduled Pinned Locked Moved Solved General and Desktop
52 Posts 6 Posters 4.6k Views
  • 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.
  • P Pl45m4
    15 Dec 2021, 14:27

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

    S Offline
    S Offline
    Swati777999
    wrote on 17 Dec 2021, 01:27 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
    • J JKSH
      16 Dec 2021, 12:23

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

      S Offline
      S Offline
      Swati777999
      wrote on 17 Dec 2021, 01:46 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

      J 1 Reply Last reply 17 Dec 2021, 02:03
      0
      • S Swati777999
        17 Dec 2021, 01:46

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

        J Offline
        J Offline
        JKSH
        Moderators
        wrote on 17 Dec 2021, 02:03 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

        S 1 Reply Last reply 17 Dec 2021, 02:17
        0
        • J JKSH
          17 Dec 2021, 02:03

          @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?
          S Offline
          S Offline
          Swati777999
          wrote on 17 Dec 2021, 02:17 last edited by Swati777999
          #25

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

          That's because your scrollArea is a **child widget** but you did not put it inside a **layout.
          If I write flowLayout ->addWidget(scroll); , my program ends forcefully.

          Questions:
          1. In your latest code, who is scrollArea's parent?
          Ans: the mainwindow (I've set its parent to be this . As mentioned above, if I set it's parent to be flowWidget,my program crashes.

          2. Do you need scrollArea to be a child widget? In other words, does scrollArea need a parent?
          Ans : It's like the main window is the parent ; its child is flowWidget whose children are buttons , scroll is to be applied to flowWidget such that scroll functionality works for all the buttons simultaneously.

          Note : I should be able to navigate to the buttons at the bottom from the top buttons by scrolling. This is my objective.

          3. How would you make scrollArea a top-level widget?
          Ans: It was just a part of my experimentation, as it is not working neither for scroll->setWidget(flowWidget) nor for QScrollArea *scroll = new QScrollArea (flowWidget);

          I hope it makes much sense now/

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

          P 1 Reply Last reply 17 Dec 2021, 03:04
          0
          • S Swati777999
            17 Dec 2021, 02:17

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

            That's because your scrollArea is a **child widget** but you did not put it inside a **layout.
            If I write flowLayout ->addWidget(scroll); , my program ends forcefully.

            Questions:
            1. In your latest code, who is scrollArea's parent?
            Ans: the mainwindow (I've set its parent to be this . As mentioned above, if I set it's parent to be flowWidget,my program crashes.

            2. Do you need scrollArea to be a child widget? In other words, does scrollArea need a parent?
            Ans : It's like the main window is the parent ; its child is flowWidget whose children are buttons , scroll is to be applied to flowWidget such that scroll functionality works for all the buttons simultaneously.

            Note : I should be able to navigate to the buttons at the bottom from the top buttons by scrolling. This is my objective.

            3. How would you make scrollArea a top-level widget?
            Ans: It was just a part of my experimentation, as it is not working neither for scroll->setWidget(flowWidget) nor for QScrollArea *scroll = new QScrollArea (flowWidget);

            I hope it makes much sense now/

            P Offline
            P Offline
            Pl45m4
            wrote on 17 Dec 2021, 03:04 last edited by Pl45m4
            #26

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

            I hope it makes much sense now

            Not really, at least not to me.

            For what purpose is the FlowWidget now?
            Can't you just assign the flowLayout to your mainWindow?

            Note: scrollArea can handle one entire widget (with all of its sub-widgets and layouts). As far as I understood, your buttons are on multiple widgets, am I right?!
            Don't know how your "scroll from top buttons down to bottom buttons" should work. At least when the entire widget is as big as the parent window.

            Edit:
            Quick fix: set your main widget (whatever it might be, maybe scrollArea?!) as centralWidget with setCentralWidget(.....), so the content covers your whole mainWindow.


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

            ~E. W. Dijkstra

            S 1 Reply Last reply 17 Dec 2021, 03:31
            1
            • P Pl45m4
              17 Dec 2021, 03:04

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

              I hope it makes much sense now

              Not really, at least not to me.

              For what purpose is the FlowWidget now?
              Can't you just assign the flowLayout to your mainWindow?

              Note: scrollArea can handle one entire widget (with all of its sub-widgets and layouts). As far as I understood, your buttons are on multiple widgets, am I right?!
              Don't know how your "scroll from top buttons down to bottom buttons" should work. At least when the entire widget is as big as the parent window.

              Edit:
              Quick fix: set your main widget (whatever it might be, maybe scrollArea?!) as centralWidget with setCentralWidget(.....), so the content covers your whole mainWindow.

              S Offline
              S Offline
              Swati777999
              wrote on 17 Dec 2021, 03:31 last edited by Swati777999
              #27

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

              For what purpose is the FlowWidget now?

              Can't you just assign the flowLayout to your mainWindow?
              Yes, this is what I did at the first place but I followed the suggestion of @JKSH for implementing the scrollArea for all button widgets.

              Then you should:
              Put the flowLayout in a container/child widget
              Put that container/child widget in the scrollArea
              

              So, I put the entire flowlayout inside a flowWidget.

              Note: scrollArea can handle one entire widget (with all of its sub-widgets and layouts). As far as I understood, your buttons are on multiple widgets, am I right?!
              Yes, my buttons are arrays of widgets. I want to enable scrolling property just the way I use this link of this forum ; to be able to navigate from top to bottom of this page where the contents of my windows are buttons.

              Don't know how your "scroll from top buttons down to bottom buttons" should work. At least when the entire widgets is as big as the parent window.

              I want to navigate to the bottom of the mainwindow through the scrollbar where the contents of the mainWindow are buttons , just like the following picture; scrollbar in the bottom and right side. In the figure, there are 20 push buttons but I can only view 12 out of them in my window.

              flow_Layout_QPushButtons.PNG

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

              P 1 Reply Last reply 17 Dec 2021, 04:45
              0
              • S Swati777999
                17 Dec 2021, 03:31

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

                For what purpose is the FlowWidget now?

                Can't you just assign the flowLayout to your mainWindow?
                Yes, this is what I did at the first place but I followed the suggestion of @JKSH for implementing the scrollArea for all button widgets.

                Then you should:
                Put the flowLayout in a container/child widget
                Put that container/child widget in the scrollArea
                

                So, I put the entire flowlayout inside a flowWidget.

                Note: scrollArea can handle one entire widget (with all of its sub-widgets and layouts). As far as I understood, your buttons are on multiple widgets, am I right?!
                Yes, my buttons are arrays of widgets. I want to enable scrolling property just the way I use this link of this forum ; to be able to navigate from top to bottom of this page where the contents of my windows are buttons.

                Don't know how your "scroll from top buttons down to bottom buttons" should work. At least when the entire widgets is as big as the parent window.

                I want to navigate to the bottom of the mainwindow through the scrollbar where the contents of the mainWindow are buttons , just like the following picture; scrollbar in the bottom and right side. In the figure, there are 20 push buttons but I can only view 12 out of them in my window.

                flow_Layout_QPushButtons.PNG

                P Offline
                P Offline
                Pl45m4
                wrote on 17 Dec 2021, 04:45 last edited by
                #28

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

                where the contents of the mainWindow are buttons

                The content (= centralwidget) of your mainWindow should be your scrollArea then. And inside this scrollArea you place the widget with your buttons.


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

                ~E. W. Dijkstra

                S 1 Reply Last reply 17 Dec 2021, 06:44
                1
                • P Pl45m4
                  17 Dec 2021, 04:45

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

                  where the contents of the mainWindow are buttons

                  The content (= centralwidget) of your mainWindow should be your scrollArea then. And inside this scrollArea you place the widget with your buttons.

                  S Offline
                  S Offline
                  Swati777999
                  wrote on 17 Dec 2021, 06:44 last edited by Swati777999
                  #29

                  @Pl45m4
                  The content (= centralwidget) of your mainWindow should be your scrollArea then. And inside this scrollArea you place the widget with your buttons.
                  Okay, Let me write the whole function according to your suggestion.

                  Window::Window()
                  {
                  QMainWindow *a= new QMainWindow(this);
                  
                  QWidget *flowWidget = new QWidget();
                  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();
                  scroll->setWidget(flowWidget);
                  
                  a->setCentralWidget(scroll);
                  
                  
                  a->show();
                  
                  setWindowTitle(tr("Flow Layout"));
                  }
                  

                  I obviously,get 2 windows from the above code, Window1 corresponding to this by default window which is blank.
                  Window2 is as shown below
                  Program-2-17.12_window2.PNG

                  scroll Area is applied to the window but the flowLayout seems not to be working and the widgets take vertical Layout. Can you help me to fix this?

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

                  P J 2 Replies Last reply 17 Dec 2021, 10:35
                  0
                  • S Swati777999
                    17 Dec 2021, 06:44

                    @Pl45m4
                    The content (= centralwidget) of your mainWindow should be your scrollArea then. And inside this scrollArea you place the widget with your buttons.
                    Okay, Let me write the whole function according to your suggestion.

                    Window::Window()
                    {
                    QMainWindow *a= new QMainWindow(this);
                    
                    QWidget *flowWidget = new QWidget();
                    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();
                    scroll->setWidget(flowWidget);
                    
                    a->setCentralWidget(scroll);
                    
                    
                    a->show();
                    
                    setWindowTitle(tr("Flow Layout"));
                    }
                    

                    I obviously,get 2 windows from the above code, Window1 corresponding to this by default window which is blank.
                    Window2 is as shown below
                    Program-2-17.12_window2.PNG

                    scroll Area is applied to the window but the flowLayout seems not to be working and the widgets take vertical Layout. Can you help me to fix this?

                    P Offline
                    P Offline
                    Pl45m4
                    wrote on 17 Dec 2021, 10:35 last edited by
                    #30

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

                    Window::Window()
                    {
                    QMainWindow *a= new QMainWindow(this);

                    QWidget *flowWidget = new QWidget();
                    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();
                    scroll->setWidget(flowWidget);

                    a->setCentralWidget(scroll);

                    a->show();

                    That's not what I suggested....

                    The window with the title flowLayout IS your MainWindow, right?! Why you created another one ?

                    I obviously,get 2 windows from the above code, Window1 corresponding to this by default window which is blank.

                    Yes, not very surprising from above code...

                    Window::Window()

                    What is this class? Your first mainWindow? Then you dont need to create another QMainWindow *a= new QMainWindow(this);
                    inside this class. Remove it and call this->setCentralWidget(....) instead (assuming Window is a QMainWindow class).


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

                    ~E. W. Dijkstra

                    S 2 Replies Last reply 20 Dec 2021, 02:06
                    2
                    • S Swati777999
                      17 Dec 2021, 06:44

                      @Pl45m4
                      The content (= centralwidget) of your mainWindow should be your scrollArea then. And inside this scrollArea you place the widget with your buttons.
                      Okay, Let me write the whole function according to your suggestion.

                      Window::Window()
                      {
                      QMainWindow *a= new QMainWindow(this);
                      
                      QWidget *flowWidget = new QWidget();
                      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();
                      scroll->setWidget(flowWidget);
                      
                      a->setCentralWidget(scroll);
                      
                      
                      a->show();
                      
                      setWindowTitle(tr("Flow Layout"));
                      }
                      

                      I obviously,get 2 windows from the above code, Window1 corresponding to this by default window which is blank.
                      Window2 is as shown below
                      Program-2-17.12_window2.PNG

                      scroll Area is applied to the window but the flowLayout seems not to be working and the widgets take vertical Layout. Can you help me to fix this?

                      J Offline
                      J Offline
                      JKSH
                      Moderators
                      wrote on 18 Dec 2021, 05:46 last edited by JKSH
                      #31

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

                      scroll Area is applied to the window but the flowLayout seems not to be working and the widgets take vertical Layout. Can you help me to fix this?

                      Your flowWidget is too narrow -- that's why the flow layout can't put buttons side-by-side. Give it a larger minimum width.

                      Remember: The width of the QScrollArea is not the same as the width of the widget it holds

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

                      S 1 Reply Last reply 20 Dec 2021, 02:28
                      1
                      • P Pl45m4
                        17 Dec 2021, 10:35

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

                        Window::Window()
                        {
                        QMainWindow *a= new QMainWindow(this);

                        QWidget *flowWidget = new QWidget();
                        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();
                        scroll->setWidget(flowWidget);

                        a->setCentralWidget(scroll);

                        a->show();

                        That's not what I suggested....

                        The window with the title flowLayout IS your MainWindow, right?! Why you created another one ?

                        I obviously,get 2 windows from the above code, Window1 corresponding to this by default window which is blank.

                        Yes, not very surprising from above code...

                        Window::Window()

                        What is this class? Your first mainWindow? Then you dont need to create another QMainWindow *a= new QMainWindow(this);
                        inside this class. Remove it and call this->setCentralWidget(....) instead (assuming Window is a QMainWindow class).

                        S Offline
                        S Offline
                        Swati777999
                        wrote on 20 Dec 2021, 02:06 last edited by
                        #32

                        @Pl45m4 said in Syntax for Vector of QPushbuttons added to FlowLayout:
                        Actually, I'm using the example file of flowLayout given in the section of Examples in Qt Creator where class Window used [subclass of QWidget].

                        The window with the title flowLayout IS your MainWindow, right?! Why you created another one ?
                        As you can see, there are two windows with names as flowLayout and FlowLayout . My mainwindow should be Flow Layout for which I wrote the following code:
                        I needed to add scroll functionality to the following code.

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

                        What is this class? Your first mainWindow? Then you dont need to create another QMainWindow *a= new QMainWindow(this);
                        inside this class. Remove it and call this->setCentralWidget(....) instead (assuming Window is a QMainWindow class).

                        I used QMainWindow *a= new QMainWindow(this); because it seemed to be working partially.

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

                        1 Reply Last reply
                        0
                        • P Pl45m4
                          17 Dec 2021, 10:35

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

                          Window::Window()
                          {
                          QMainWindow *a= new QMainWindow(this);

                          QWidget *flowWidget = new QWidget();
                          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();
                          scroll->setWidget(flowWidget);

                          a->setCentralWidget(scroll);

                          a->show();

                          That's not what I suggested....

                          The window with the title flowLayout IS your MainWindow, right?! Why you created another one ?

                          I obviously,get 2 windows from the above code, Window1 corresponding to this by default window which is blank.

                          Yes, not very surprising from above code...

                          Window::Window()

                          What is this class? Your first mainWindow? Then you dont need to create another QMainWindow *a= new QMainWindow(this);
                          inside this class. Remove it and call this->setCentralWidget(....) instead (assuming Window is a QMainWindow class).

                          S Offline
                          S Offline
                          Swati777999
                          wrote on 20 Dec 2021, 02:11 last edited by
                          #33

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

                          inside this class. Remove it and call this->setCentralWidget(....) instead (assuming Window is a QMainWindow class).

                          this->setCentralWidget(....) this gives me error as this is an object of Window class which is a subclass of QWidget.
                          setCentralWidget(.....) can be applied to the object of QMainWindow.

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

                          1 Reply Last reply
                          0
                          • J JKSH
                            18 Dec 2021, 05:46

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

                            scroll Area is applied to the window but the flowLayout seems not to be working and the widgets take vertical Layout. Can you help me to fix this?

                            Your flowWidget is too narrow -- that's why the flow layout can't put buttons side-by-side. Give it a larger minimum width.

                            Remember: The width of the QScrollArea is not the same as the width of the widget it holds

                            S Offline
                            S Offline
                            Swati777999
                            wrote on 20 Dec 2021, 02:28 last edited by Swati777999
                            #34

                            @JKSH said in Syntax for Vector of QPushbuttons added to FlowLayout:
                            Your flowWidget is too narrow -- that's why the flow layout can't put buttons side-by-side. Give it a larger minimum width.
                            Remember: The width of the QScrollArea is not the same as the width of the widget it holds

                            This works like a charm! Thanks a ton! I was thinking it to be the fault of my design and made it too complicated.

                            Just a doubt about the number of buttons appearing/row.

                            Window::Window
                            {
                            QMainWindow *a= new QMainWindow(this);
                            
                            QWidget *flowWidget = new QWidget();
                            FlowLayout *flowLayout = new FlowLayout();
                            flowWidget->setLayout(flowLayout);
                            flowWidget ->setMinimumSize(1200,1200);
                            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();
                            scroll->setWidget(flowWidget);
                            
                            a->setCentralWidget(scroll);
                            a->show();
                            }
                            
                            

                            This is the result I get in flowLayout window.
                            Program-1-20.12.PNG

                            From the figure, I get 5 buttons per row but as per the following lines , shouldn't I be getting 6 buttons/row ( 1200/200=6)

                            flowWidget ->setMinimumSize(1200,1200); // size of widget
                            pb->setMinimumSize(200,200); //size of buttons
                            
                            

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

                            Christian EhrlicherC 1 Reply Last reply 20 Dec 2021, 06:09
                            0
                            • S Swati777999
                              20 Dec 2021, 02:28

                              @JKSH said in Syntax for Vector of QPushbuttons added to FlowLayout:
                              Your flowWidget is too narrow -- that's why the flow layout can't put buttons side-by-side. Give it a larger minimum width.
                              Remember: The width of the QScrollArea is not the same as the width of the widget it holds

                              This works like a charm! Thanks a ton! I was thinking it to be the fault of my design and made it too complicated.

                              Just a doubt about the number of buttons appearing/row.

                              Window::Window
                              {
                              QMainWindow *a= new QMainWindow(this);
                              
                              QWidget *flowWidget = new QWidget();
                              FlowLayout *flowLayout = new FlowLayout();
                              flowWidget->setLayout(flowLayout);
                              flowWidget ->setMinimumSize(1200,1200);
                              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();
                              scroll->setWidget(flowWidget);
                              
                              a->setCentralWidget(scroll);
                              a->show();
                              }
                              
                              

                              This is the result I get in flowLayout window.
                              Program-1-20.12.PNG

                              From the figure, I get 5 buttons per row but as per the following lines , shouldn't I be getting 6 buttons/row ( 1200/200=6)

                              flowWidget ->setMinimumSize(1200,1200); // size of widget
                              pb->setMinimumSize(200,200); //size of buttons
                              
                              
                              Christian EhrlicherC Online
                              Christian EhrlicherC Online
                              Christian Ehrlicher
                              Lifetime Qt Champion
                              wrote on 20 Dec 2021, 06:09 last edited by
                              #35

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

                              From the figure, I get 5 buttons per row but as per the following lines , shouldn't I be getting 6 buttons/row ( 1200/200=6)

                              And you see that the widgets have some margins between them? So why should 6 widgets with 200x each + margins fit into 1200px??

                              Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                              Visit the Qt Academy at https://academy.qt.io/catalog

                              S 1 Reply Last reply 20 Dec 2021, 06:22
                              1
                              • Christian EhrlicherC Christian Ehrlicher
                                20 Dec 2021, 06:09

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

                                From the figure, I get 5 buttons per row but as per the following lines , shouldn't I be getting 6 buttons/row ( 1200/200=6)

                                And you see that the widgets have some margins between them? So why should 6 widgets with 200x each + margins fit into 1200px??

                                S Offline
                                S Offline
                                Swati777999
                                wrote on 20 Dec 2021, 06:22 last edited by
                                #36

                                @Christian-Ehrlicher That's right but by intuition/observation, I can say that, in the above figure, one more button can easily fit in. What do you think?

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

                                J 1 Reply Last reply 20 Dec 2021, 07:52
                                0
                                • S Swati777999
                                  20 Dec 2021, 06:22

                                  @Christian-Ehrlicher That's right but by intuition/observation, I can say that, in the above figure, one more button can easily fit in. What do you think?

                                  J Offline
                                  J Offline
                                  JKSH
                                  Moderators
                                  wrote on 20 Dec 2021, 07:52 last edited by
                                  #37

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

                                  by intuition/observation, I can say that, in the above figure, one more button can easily fit in.

                                  Apply the same intuition to your previous case:

                                  Then, apply the same explanation that I gave you in my previous post.

                                  Then, explain to us what's happening.

                                  This works like a charm! Thanks a ton! I was thinking it to be the fault of my design and made it too complicated.

                                  Great!

                                  Complicated design does not cause code to stop working. However, it does make life very difficult for you.

                                  Window::Window
                                  {
                                  QMainWindow *a= new QMainWindow(this);
                                  

                                  You are making your design extremely complicated again... You don't need a Window plus a QMainWindow plus a QScrollArea.

                                  Before you proceed any further, simplify your design first!

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

                                  S 2 Replies Last reply 20 Dec 2021, 08:25
                                  3
                                  • J JKSH
                                    20 Dec 2021, 07:52

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

                                    by intuition/observation, I can say that, in the above figure, one more button can easily fit in.

                                    Apply the same intuition to your previous case:

                                    Then, apply the same explanation that I gave you in my previous post.

                                    Then, explain to us what's happening.

                                    This works like a charm! Thanks a ton! I was thinking it to be the fault of my design and made it too complicated.

                                    Great!

                                    Complicated design does not cause code to stop working. However, it does make life very difficult for you.

                                    Window::Window
                                    {
                                    QMainWindow *a= new QMainWindow(this);
                                    

                                    You are making your design extremely complicated again... You don't need a Window plus a QMainWindow plus a QScrollArea.

                                    Before you proceed any further, simplify your design first!

                                    S Offline
                                    S Offline
                                    Swati777999
                                    wrote on 20 Dec 2021, 08:25 last edited by
                                    #38

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

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

                                    by intuition/observation, I can say that, in the above figure, one more button can easily fit in.

                                    Apply the same intuition to your previous case:

                                    Then, apply the same explanation that I gave you in my previous post.
                                    Then, explain to us what's happening.

                                    In this case , the setminimumsize() for the widget is not used ,that's why the buttons take a vertical layout.

                                    You are making your design extremely complicated again... You don't need a Window plus a QMainWindow plus a QScrollArea.Before you proceed any further, simplify your design first!

                                    With the objects of QMainWindow,QScrollArea , I am getting the desired result as I have suppressed /commented window.show(); in main.cpp
                                    Program-1-20.12.PNG

                                    Follow main.cpp below:

                                    #include <QApplication>
                                    
                                    #include "window.h"
                                    
                                    int main(int argc, char *argv[])
                                    {
                                        QApplication app(argc, argv);
                                        Window window;
                                    #if defined(Q_OS_SYMBIAN)
                                        window.showMaximized();
                                    #else
                                        //window.show();
                                    #endif
                                        return app.exec();
                                    }
                                    

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

                                    jsulmJ 1 Reply Last reply 20 Dec 2021, 08:28
                                    0
                                    • S Swati777999
                                      20 Dec 2021, 08:25

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

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

                                      by intuition/observation, I can say that, in the above figure, one more button can easily fit in.

                                      Apply the same intuition to your previous case:

                                      Then, apply the same explanation that I gave you in my previous post.
                                      Then, explain to us what's happening.

                                      In this case , the setminimumsize() for the widget is not used ,that's why the buttons take a vertical layout.

                                      You are making your design extremely complicated again... You don't need a Window plus a QMainWindow plus a QScrollArea.Before you proceed any further, simplify your design first!

                                      With the objects of QMainWindow,QScrollArea , I am getting the desired result as I have suppressed /commented window.show(); in main.cpp
                                      Program-1-20.12.PNG

                                      Follow main.cpp below:

                                      #include <QApplication>
                                      
                                      #include "window.h"
                                      
                                      int main(int argc, char *argv[])
                                      {
                                          QApplication app(argc, argv);
                                          Window window;
                                      #if defined(Q_OS_SYMBIAN)
                                          window.showMaximized();
                                      #else
                                          //window.show();
                                      #endif
                                          return app.exec();
                                      }
                                      
                                      jsulmJ Offline
                                      jsulmJ Offline
                                      jsulm
                                      Lifetime Qt Champion
                                      wrote on 20 Dec 2021, 08:28 last edited by jsulm
                                      #39

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

                                      I am getting the desired result as I have suppressed /commented window.show(); in main.cpp

                                      Because your Window creates and shows a new QMainWindow! Why?!
                                      I think you was already told several times that there is no need to create two windows.
                                      Why don't you remove

                                      QMainWindow *a= new QMainWindow(this);
                                      

                                      and show Window?

                                      https://forum.qt.io/topic/113070/qt-code-of-conduct

                                      S 1 Reply Last reply 20 Dec 2021, 08:34
                                      1
                                      • J JKSH
                                        20 Dec 2021, 07:52

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

                                        by intuition/observation, I can say that, in the above figure, one more button can easily fit in.

                                        Apply the same intuition to your previous case:

                                        Then, apply the same explanation that I gave you in my previous post.

                                        Then, explain to us what's happening.

                                        This works like a charm! Thanks a ton! I was thinking it to be the fault of my design and made it too complicated.

                                        Great!

                                        Complicated design does not cause code to stop working. However, it does make life very difficult for you.

                                        Window::Window
                                        {
                                        QMainWindow *a= new QMainWindow(this);
                                        

                                        You are making your design extremely complicated again... You don't need a Window plus a QMainWindow plus a QScrollArea.

                                        Before you proceed any further, simplify your design first!

                                        S Offline
                                        S Offline
                                        Swati777999
                                        wrote on 20 Dec 2021, 08:30 last edited by
                                        #40

                                        @JKSH Now, I'm trying out the second part of this design

                                        QPushButtons+scroll.PNG

                                        You can see the bigger red-rectangle is what I was designing above. Now,I've to design the whole layout.Here's my code-

                                        Window::Window()

                                        {
                                        QMainWindow *a= new QMainWindow(this);
                                        
                                        QWidget *WindowWidget= new QWidget();
                                        WindowWidget->setMinimumSize(2000,2000);
                                        
                                        QVBoxLayout *WindowLayout = new QVBoxLayout(WindowWidget);
                                        QScrollArea *scroll =new QScrollArea();
                                        
                                        QLabel *WindowHeading = new QLabel("Experimenting with Scrollbar in Flow Layout");
                                        WindowLayout->addWidget(WindowHeading);
                                        WindowLayout->setAlignment(WindowHeading,Qt::AlignCenter);
                                        
                                        
                                        QWidget *flowWidget = new QWidget();
                                        FlowLayout *flowLayout = new 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);
                                        
                                        }
                                        flowWidget->setLayout(flowLayout);
                                        flowWidget ->setMinimumSize(1200,1200);
                                        WindowLayout->addWidget(flowWidget);
                                        
                                        //scroll->setWidget(flowWidget);
                                        
                                        a->setCentralWidget(WindowWidget);
                                        a->show();
                                        }
                                        

                                        can't see it working! :'(

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

                                        J 1 Reply Last reply 20 Dec 2021, 12:20
                                        0
                                        • jsulmJ jsulm
                                          20 Dec 2021, 08:28

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

                                          I am getting the desired result as I have suppressed /commented window.show(); in main.cpp

                                          Because your Window creates and shows a new QMainWindow! Why?!
                                          I think you was already told several times that there is no need to create two windows.
                                          Why don't you remove

                                          QMainWindow *a= new QMainWindow(this);
                                          

                                          and show Window?

                                          S Offline
                                          S Offline
                                          Swati777999
                                          wrote on 20 Dec 2021, 08:34 last edited by
                                          #41

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

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

                                          I am getting the desired result as I have suppressed /commented window.show(); in main.cpp

                                          Because your Window creates and shows a new QMainWindow! Why?!
                                          I think you was already told several times that there is no need to create two windows.

                                          Why don't you remove
                                          QMainWindow *a= new QMainWindow(this); ?
                                          As already mentioned before, Window class is a sub-class of QWidget ,for setting scrolling option , I need the object of QMainWindow , that's the reason why I created the object a of QMainWindow.

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

                                          jsulmJ 1 Reply Last reply 20 Dec 2021, 08:35
                                          0

                                          31/52

                                          18 Dec 2021, 05:46

                                          • Login

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