Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Adding Pushbuttons Dynamically

Adding Pushbuttons Dynamically

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
13 Posts 3 Posters 13.8k 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.
  • D Offline
    D Offline
    DivyaMuthyala
    wrote on last edited by DivyaMuthyala
    #1

    Hi,

    I want to add pushbuttons dynamically, button adding data will be retrieved from database, after retrieving we have to add buttons dynamically.

    Can anyone please give solution to add buttons dynamically?
    Thanks in advance

    jsulmJ 1 Reply Last reply
    0
    • D DivyaMuthyala

      Hi,

      I want to add pushbuttons dynamically, button adding data will be retrieved from database, after retrieving we have to add buttons dynamically.

      Can anyone please give solution to add buttons dynamically?
      Thanks in advance

      jsulmJ Online
      jsulmJ Online
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @DivyaMuthyala What exactly is the problem? You can create QPushButton instances as any other class instances in C++. You should ask more specific questions.

      void MyClass::MySlot()
      {
          for (int i = 0; i < 10; ++i) {
              QPushButton button = new QPushButton(this);
              button->setText(QString::number(i));
              connect(button, SIGNAL(clicked(bool)), this, SLOT(onClicked(bool)));
              layout()->addWidget(button); // Add the button to the layout
              button->show();
          }
      }
      

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

      1 Reply Last reply
      2
      • D Offline
        D Offline
        DivyaMuthyala
        wrote on last edited by
        #3

        Hi Jsulm,

        Here you have mentioned slot ,actually where is slot definition??

        jsulmJ 1 Reply Last reply
        0
        • D DivyaMuthyala

          Hi Jsulm,

          Here you have mentioned slot ,actually where is slot definition??

          jsulmJ Online
          jsulmJ Online
          jsulm
          Lifetime Qt Champion
          wrote on last edited by jsulm
          #4

          @DivyaMuthyala "Here you have mentioned slot ,actually where is slot definition??" - in the widget class where you want to add these buttons? This is already definition - do you mean declaration? This is just an example - where to do it in your case depends on your requirements/design which I don't know.

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

          1 Reply Last reply
          0
          • D Offline
            D Offline
            DivyaMuthyala
            wrote on last edited by
            #5

            Hi Jsulm,

            For sample I am trying following code, but only one button is creating with text 0.
            CODE:
            int main(int argc, char *argv[])
            {
            QApplication app(argc,argv);
            QWidget *wid=new QWidget();
            QVBoxLayout *layout=new QVBoxLayout();
            for (int i = 0; i < 10; ++i){
            QPushButton *button = new QPushButton();
            button->setText(QString::number(i));
            QObject::connect(button, SIGNAL(clicked(bool)), wid, SLOT(onClicked(bool)));
            layout->addWidget(button);
            wid->setLayout(layout); // Add the button to the layout
            wid->show();

                return app.exec();}
            

            }
            Please check it once and guide me.

            jsulmJ 1 Reply Last reply
            0
            • D DivyaMuthyala

              Hi Jsulm,

              For sample I am trying following code, but only one button is creating with text 0.
              CODE:
              int main(int argc, char *argv[])
              {
              QApplication app(argc,argv);
              QWidget *wid=new QWidget();
              QVBoxLayout *layout=new QVBoxLayout();
              for (int i = 0; i < 10; ++i){
              QPushButton *button = new QPushButton();
              button->setText(QString::number(i));
              QObject::connect(button, SIGNAL(clicked(bool)), wid, SLOT(onClicked(bool)));
              layout->addWidget(button);
              wid->setLayout(layout); // Add the button to the layout
              wid->show();

                  return app.exec();}
              

              }
              Please check it once and guide me.

              jsulmJ Online
              jsulmJ Online
              jsulm
              Lifetime Qt Champion
              wrote on last edited by jsulm
              #6

              @DivyaMuthyala Please start to fix your code by yourself - you are doing many things wrong:

              int main(int argc, char *argv[])
              {
                  QApplication app(argc,argv);
                  QWidget *wid=new QWidget();
                  QVBoxLayout *layout=new QVBoxLayout();
                  for (int i = 0; i < 10; ++i){
                     QPushButton *button = new QPushButton();
                      button->setText(QString::number(i));
                      //QObject::connect(button, SIGNAL(clicked(bool)), wid, SLOT(onClicked(bool))); <-- THERE IS NO SUCH SLOT IN QWIDGET!
                      layout->addWidget(button);
                      button->show();
                  }
                  wid->setLayout(layout); // Add the layout to widget!
                  wid->show();
                  return app.exec();
              }
              

              I just spent time to try out the code above: it works.

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

              1 Reply Last reply
              0
              • D Offline
                D Offline
                DivyaMuthyala
                wrote on last edited by
                #7

                Here in for loop you just keeping less than 10, so You are telling to create ten buttons here, if in the information to create how many buttons was present in database and we have to retrieve from databse and we have to create, how we can approach?

                jsulmJ 1 Reply Last reply
                0
                • D DivyaMuthyala

                  Here in for loop you just keeping less than 10, so You are telling to create ten buttons here, if in the information to create how many buttons was present in database and we have to retrieve from databse and we have to create, how we can approach?

                  jsulmJ Online
                  jsulmJ Online
                  jsulm
                  Lifetime Qt Champion
                  wrote on last edited by
                  #8

                  @DivyaMuthyala Please ask specific questions!
                  If you retrieve the number of buttons to create from the database then just replace 10 with the number you get from the db.
                  What exactly is the problem?

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

                  1 Reply Last reply
                  2
                  • D Offline
                    D Offline
                    DivyaMuthyala
                    wrote on last edited by
                    #9

                    hi JSlum,

                    How to retrieve data from database?

                    jsulmJ 1 Reply Last reply
                    0
                    • D DivyaMuthyala

                      hi JSlum,

                      How to retrieve data from database?

                      jsulmJ Online
                      jsulmJ Online
                      jsulm
                      Lifetime Qt Champion
                      wrote on last edited by
                      #10

                      @DivyaMuthyala How about reading documentation http://doc.qt.io/qt-5/sql-connecting.html ?

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

                      1 Reply Last reply
                      1
                      • K Offline
                        K Offline
                        kumararajas
                        wrote on last edited by
                        #11

                        Hi Divya,

                        In my application, even I wanted to have dynamic buttons and this how I have achieved.

                        But I have a configuration that says what will be the maximum number of buttons that can be shown.

                        I create two dimensional array to contain pointer for each button.

                            actionButtons = new QPushButton*[buttonList.size()];
                        

                        Then this creates the button and updates the pointers in the array created above.
                        I use signal mapper to connect signals to slot.

                            for( unsigned int i=0; i < buttonList.size(); ++i )
                            {
                                actionButtons[i] = new QPushButton( this );
                                actionButtons[i]->setText( buttonName );
                        
                                connect( actionButtons[i]
                                       , SIGNAL( clicked() )
                                       , mapper
                                       , SLOT( map() ) );
                        
                                mapper->setMapping( actionButtons[i]
                                                  , actionButtons[i] );
                            }
                        

                        So, by signal mapper, each button is connected to it's own signal. Finally connect the mapper to a slot for function execution.

                            connect( mapper
                                   , SIGNAL( mapped( QWidget* ) )
                                   , this
                                   , SLOT( actionButtonClick( QWidget* ) ) );
                        

                        Implement the slot -

                        void ButtonBar::actionButtonClick( QWidget* btn )
                        {
                            QPushButton* pushButton = qobject_cast< CustomPushButton* > ( btn );
                            // Do the job
                        

                        In my case, I did not want to create and delete multiple times, as the button may appear or disappear for every second. So, I just hide them and show based on the need.
                        You may have a different use, but just as a performance improvement, I try not to do much job on creating and deleting a lot on the fly, since this is an embedded system stuff.

                        --Kumar

                        1 Reply Last reply
                        0
                        • K Offline
                          K Offline
                          kumararajas
                          wrote on last edited by
                          #12

                          @jsulm Sorry, I did not try to override your answers. They were perfect and appropriate! I just wanted add some code if that can help @DivyaMuthyala

                          --Kumar

                          jsulmJ 1 Reply Last reply
                          0
                          • K kumararajas

                            @jsulm Sorry, I did not try to override your answers. They were perfect and appropriate! I just wanted add some code if that can help @DivyaMuthyala

                            jsulmJ Online
                            jsulmJ Online
                            jsulm
                            Lifetime Qt Champion
                            wrote on last edited by
                            #13

                            @kumararajas That is perfectly fine! No problem! I'm not the only one allowed to write here :-)

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

                            1 Reply Last reply
                            2

                            • Login

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