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. spinbox input add rows ??

spinbox input add rows ??

Scheduled Pinned Locked Moved Unsolved General and Desktop
29 Posts 6 Posters 3.7k 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.
  • Christian EhrlicherC Offline
    Christian EhrlicherC Offline
    Christian Ehrlicher
    Lifetime Qt Champion
    wrote on last edited by
    #5

    @n-2204 said in spinbox input add rows ??:

    this is not working why??

    Because you did something wrong.
    I would guess ui.tableView is not the correct receiver.

    Use the new signal/slot syntax to catch such errors during compile time.

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

    1 Reply Last reply
    3
    • N Offline
      N Offline
      n-2204
      wrote on last edited by n-2204
      #6

      tried after change ui.tableview to model but not working

          QObject:: connect(ui.spinBox, SIGNAL(valueChanged(int)), model, SLOT(setTableRows())); 
      void tool::setTableRows()
      {
           int rows = ui.spinBox->value();
      model->setRowCount(rows);
      }
      

      or tried using insertrows also not working

         QObject:: connect(ui.spinBox, SIGNAL(valueChanged(int)), model, SLOT(setTableRows())); 
       void tool::setTableRows()
      {
      int noofrows = ui.spinBox->value();
      for (int i = 0;i < noofrows;++i)
      {
          model->insertRows(i, model->rowCount(QModelIndex()));
      }
      }
      
      JonBJ 1 Reply Last reply
      0
      • N n-2204

        tried after change ui.tableview to model but not working

            QObject:: connect(ui.spinBox, SIGNAL(valueChanged(int)), model, SLOT(setTableRows())); 
        void tool::setTableRows()
        {
             int rows = ui.spinBox->value();
        model->setRowCount(rows);
        }
        

        or tried using insertrows also not working

           QObject:: connect(ui.spinBox, SIGNAL(valueChanged(int)), model, SLOT(setTableRows())); 
         void tool::setTableRows()
        {
        int noofrows = ui.spinBox->value();
        for (int i = 0;i < noofrows;++i)
        {
            model->insertRows(i, model->rowCount(QModelIndex()));
        }
        }
        
        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by JonB
        #7

        @n-2204
        First, put in debug/print statements just to see if slot called, instead of relying on seeing row count increase.

        Secondly, you have

         QObject:: connect(ui.spinBox, SIGNAL(valueChanged(int)), model, SLOT(setTableRows())); 
        

        but

         void tool::setTableRows()
        

        Is model of class tool? Because if not you are not connecting the slot.

        If you followed @Christian-Ehrlicher's suggestion of changing to new signal/slot syntax and never used SIGNAL/SLOT() macros you would find out, and your coding would be better....

        And finally I doubt you really intend

        model->insertRows(i, model->rowCount(QModelIndex()));
        

        Why rowCount() as the number of rows to add?? I would have thought given your loop you would want 1 there. You are confusing insertRows() to add multiple rows without a loop versus a loop to add one row at a time....

        N 1 Reply Last reply
        2
        • JonBJ JonB

          @n-2204
          First, put in debug/print statements just to see if slot called, instead of relying on seeing row count increase.

          Secondly, you have

           QObject:: connect(ui.spinBox, SIGNAL(valueChanged(int)), model, SLOT(setTableRows())); 
          

          but

           void tool::setTableRows()
          

          Is model of class tool? Because if not you are not connecting the slot.

          If you followed @Christian-Ehrlicher's suggestion of changing to new signal/slot syntax and never used SIGNAL/SLOT() macros you would find out, and your coding would be better....

          And finally I doubt you really intend

          model->insertRows(i, model->rowCount(QModelIndex()));
          

          Why rowCount() as the number of rows to add?? I would have thought given your loop you would want 1 there. You are confusing insertRows() to add multiple rows without a loop versus a loop to add one row at a time....

          N Offline
          N Offline
          n-2204
          wrote on last edited by
          #8

          @JonB yes tool is my class

          model = new QStandardItemModel(10, 13, this)
          ui.tableView->setModel(model);
          
          JonBJ 1 Reply Last reply
          0
          • N n-2204

            @JonB yes tool is my class

            model = new QStandardItemModel(10, 13, this)
            ui.tableView->setModel(model);
            
            JonBJ Offline
            JonBJ Offline
            JonB
            wrote on last edited by JonB
            #9

            @n-2204
            You seem to have:

                QObject:: connect(ui.spinBox, SIGNAL(valueChanged(int)), model, SLOT(setTableRows())); 
            void tool::setTableRows()
            

            You have just said that model is of type QStandardItemModel.

            But setTableRows() is a method of tool.

            And earlier you had:

            QObject::connect(ui.spinBox, SIGNAL(valueChanged(int)), ui.tableView, SLOT(setTableRows()));
            

            which had the same issue,

            For the third time, if you followed https://wiki.qt.io/New_Signal_Slot_Syntax you would get compile-time help preventing you doing what you are trying to do.

            1 Reply Last reply
            1
            • VRoninV Offline
              VRoninV Offline
              VRonin
              wrote on last edited by VRonin
              #10

              I suspect the 3rd argument might be this. You can at least put the connect inside a Q_ASSUME() so you get a runtime crash in debug mode if the connect fails

              "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
              ~Napoleon Bonaparte

              On a crusade to banish setIndexWidget() from the holy land of Qt

              1 Reply Last reply
              2
              • N Offline
                N Offline
                n-2204
                wrote on last edited by
                #11

                yes, thanks using this works
                but what happening is i added 10 rows and when i change value in spinbox to 1 then no. of rows in table also changing to 1

                so i think using loop this prblm will be solved

                int noofrows = ui.spinBox->value();
                   for (int i = 0;i < noofrows;i++)
                {
                   model->insertRows(i,noofrows);
                }
                

                if use this loop when i enter 1 in spinbox it adds two rows ?

                JonBJ 1 Reply Last reply
                0
                • N n-2204

                  yes, thanks using this works
                  but what happening is i added 10 rows and when i change value in spinbox to 1 then no. of rows in table also changing to 1

                  so i think using loop this prblm will be solved

                  int noofrows = ui.spinBox->value();
                     for (int i = 0;i < noofrows;i++)
                  {
                     model->insertRows(i,noofrows);
                  }
                  

                  if use this loop when i enter 1 in spinbox it adds two rows ?

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

                  @n-2204
                  I already told you about that earlier.

                  And finally I doubt you really intend

                  model->insertRows(i, model->rowCount(QModelIndex()));

                  Why rowCount() as the number of rows to add?? I would have thought given your loop you would want 1 there. You are confusing insertRows() to add multiple rows without a loop versus a loop to add one row at a time....

                  EITHER a for loop with insertRow(), OR no for loop and insertRows(). You really should be able to understand this.

                  Put some qDebug() statements in to see for yourself what is going on. That is what debugging is about.

                  1 Reply Last reply
                  1
                  • N Offline
                    N Offline
                    n-2204
                    wrote on last edited by
                    #13

                    ok understood
                    thank you all

                    1 Reply Last reply
                    0
                    • N Offline
                      N Offline
                      n-2204
                      wrote on last edited by
                      #14
                       tooll::tool(QWidget* parent)
                      : QMainWindow(parent)
                        {
                        ui.setupUi(this);
                       model = new QStandardItemModel(10, 13, this)
                       ui.tableView->setModel(model);
                       connect(ui.spinBox, SIGNAL(valueChanged(int)), model, 
                       SLOT(setTableRows())); 
                      }
                      void tool::setTable2Rows()
                         { 
                       int noofrows2 = ui.spinBox_2->value();
                       for (int i = 0;i < noofrows2;++i)
                        {
                            model2->insertRow(i);
                          //qDebug() << i;
                      }
                      }
                      

                      when i am using new signal/slot why i am getting error
                      (Error (active) E0304 no instance of overloaded function)

                       connect(ui.spinBox, &QSpinBox::valueChanged, this,&tool::setTableRows);
                      connect( sender, &Sender::valueChanged,    receiver, &Receiver::updateValue);
                      
                      jsulmJ VRoninV 2 Replies Last reply
                      0
                      • N n-2204
                         tooll::tool(QWidget* parent)
                        : QMainWindow(parent)
                          {
                          ui.setupUi(this);
                         model = new QStandardItemModel(10, 13, this)
                         ui.tableView->setModel(model);
                         connect(ui.spinBox, SIGNAL(valueChanged(int)), model, 
                         SLOT(setTableRows())); 
                        }
                        void tool::setTable2Rows()
                           { 
                         int noofrows2 = ui.spinBox_2->value();
                         for (int i = 0;i < noofrows2;++i)
                          {
                              model2->insertRow(i);
                            //qDebug() << i;
                        }
                        }
                        

                        when i am using new signal/slot why i am getting error
                        (Error (active) E0304 no instance of overloaded function)

                         connect(ui.spinBox, &QSpinBox::valueChanged, this,&tool::setTableRows);
                        connect( sender, &Sender::valueChanged,    receiver, &Receiver::updateValue);
                        
                        jsulmJ Offline
                        jsulmJ Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on last edited by
                        #15

                        @n-2204 Please post whole error message. Does your tooll class have setTableRows slot? I'm asking because I only see setTable2Rows()

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

                        N 1 Reply Last reply
                        0
                        • jsulmJ jsulm

                          @n-2204 Please post whole error message. Does your tooll class have setTableRows slot? I'm asking because I only see setTable2Rows()

                          N Offline
                          N Offline
                          n-2204
                          wrote on last edited by
                          #16

                          yes slot setTablerow() is also there

                           void tool::setTableRows()
                          { 
                          int noofrows = ui.spinBox->value();
                          for (int i = 0;i < noofrows;++i)
                          {
                            model->insertRow(i);
                          //qDebug() << i;
                          } 
                          

                          c++ no instance of overloaded function matches the argument list argument types are: (QSpinBox *, <unknown-type>, tooll , void (tool::)())
                          Severity Code Description Project File Line Suppression State Detail Description
                          Error (active) E0304 no instance of overloaded function "tool::connect" matches the argument list tool C:\User\source\repos\tool\tooll.cpp 265 argument types are: (QSpinBox *, <unknown-type>, tool , void (tool::)())

                          1 Reply Last reply
                          0
                          • N n-2204
                             tooll::tool(QWidget* parent)
                            : QMainWindow(parent)
                              {
                              ui.setupUi(this);
                             model = new QStandardItemModel(10, 13, this)
                             ui.tableView->setModel(model);
                             connect(ui.spinBox, SIGNAL(valueChanged(int)), model, 
                             SLOT(setTableRows())); 
                            }
                            void tool::setTable2Rows()
                               { 
                             int noofrows2 = ui.spinBox_2->value();
                             for (int i = 0;i < noofrows2;++i)
                              {
                                  model2->insertRow(i);
                                //qDebug() << i;
                            }
                            }
                            

                            when i am using new signal/slot why i am getting error
                            (Error (active) E0304 no instance of overloaded function)

                             connect(ui.spinBox, &QSpinBox::valueChanged, this,&tool::setTableRows);
                            connect( sender, &Sender::valueChanged,    receiver, &Receiver::updateValue);
                            
                            VRoninV Offline
                            VRoninV Offline
                            VRonin
                            wrote on last edited by
                            #17

                            @n-2204 said in spinbox input add rows ??:

                            tooll::tool(QWidget* parent)

                            ????

                            What's the name of the class? tooll or tool? looks like a big mess here

                            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                            ~Napoleon Bonaparte

                            On a crusade to banish setIndexWidget() from the holy land of Qt

                            1 Reply Last reply
                            0
                            • Christian EhrlicherC Offline
                              Christian EhrlicherC Offline
                              Christian Ehrlicher
                              Lifetime Qt Champion
                              wrote on last edited by
                              #18

                              @n-2204 said in spinbox input add rows ??:

                              c++ no instance of overloaded function matches the argument list argument types are: (QSpinBox *, <unknown-type>, tooll , void (tool::)())

                              How about taking a single look into the documentation? The problem is exactly explained there.

                              Simply writing something without understanding what you're doing doesn't help you at all.

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

                              1 Reply Last reply
                              1
                              • N Offline
                                N Offline
                                n-2204
                                wrote on last edited by n-2204
                                #19

                                thanks for sharing ref doc, its done

                                 connect(ui.spinBox, QOverload<int>::of(&QSpinBox::valueChanged), 
                                         this, &tool::setTableRows);
                                
                                1 Reply Last reply
                                0
                                • N Offline
                                  N Offline
                                  n-2204
                                  wrote on last edited by
                                  #20

                                  what changes need to do to end the row at end of row, now when i enter value in spinbox row is adding in top but i need to add the row at end how to do ?

                                   void tool::setTableRows()
                                  {
                                  int noofrows = ui.spinBox->value();
                                  for (int i = 0;i < noofrows;++i)
                                  {
                                     model->insertRow(i);
                                  }
                                   }
                                  connect(ui.spinBox, QOverload<int>::of(&QSpinBox::valueChanged), 
                                           this, &tool::setTableRows);
                                  
                                  jsulmJ 1 Reply Last reply
                                  0
                                  • N n-2204

                                    what changes need to do to end the row at end of row, now when i enter value in spinbox row is adding in top but i need to add the row at end how to do ?

                                     void tool::setTableRows()
                                    {
                                    int noofrows = ui.spinBox->value();
                                    for (int i = 0;i < noofrows;++i)
                                    {
                                       model->insertRow(i);
                                    }
                                     }
                                    connect(ui.spinBox, QOverload<int>::of(&QSpinBox::valueChanged), 
                                             this, &tool::setTableRows);
                                    
                                    jsulmJ Offline
                                    jsulmJ Offline
                                    jsulm
                                    Lifetime Qt Champion
                                    wrote on last edited by
                                    #21

                                    @n-2204 https://doc.qt.io/qt-5/qabstractitemmodel.html#insertRow
                                    "Inserts a single row before the given row in the child items of the parent specified".
                                    So, what do you think should you pass as row to insertRow to add at the end of the table?

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

                                    JonBJ 1 Reply Last reply
                                    1
                                    • jsulmJ jsulm

                                      @n-2204 https://doc.qt.io/qt-5/qabstractitemmodel.html#insertRow
                                      "Inserts a single row before the given row in the child items of the parent specified".
                                      So, what do you think should you pass as row to insertRow to add at the end of the table?

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

                                      @n-2204

                                      @jsulm said in spinbox input add rows ??:

                                      @n-2204 https://doc.qt.io/qt-5/qabstractitemmodel.html#insertRow
                                      "Inserts a single row before the given row in the child items of the parent specified".
                                      So, what do you think should you pass as row to insertRow to add at the end of the table?

                                      Further to @jsulm. insertRow() says

                                      Note: This function calls the virtual method insertRows.

                                      And in the docs for insertRows, immediately adjacent to insertRow, if you read it it actually tells you what to pass so that

                                      the rows are appended to any existing rows

                                      Please take the time to read docs....

                                      1 Reply Last reply
                                      2
                                      • N Offline
                                        N Offline
                                        n-2204
                                        wrote on last edited by n-2204
                                        #23

                                        how can i set value of a spinbox and also edittable for user ?

                                         void tool::setTable2Rows()
                                         {
                                        QAbstractItemModel* table2 = ui.tableView_2->model();
                                        int rows2 = ui.spinBox_2->value();
                                          ui.spinBox->setValue(10);//this is not working
                                          model2->setRowCount(rows2);
                                        }
                                        

                                        if i setvalue 10 then that no. of rows should be there

                                        JonBJ 1 Reply Last reply
                                        0
                                        • N n-2204

                                          how can i set value of a spinbox and also edittable for user ?

                                           void tool::setTable2Rows()
                                           {
                                          QAbstractItemModel* table2 = ui.tableView_2->model();
                                          int rows2 = ui.spinBox_2->value();
                                            ui.spinBox->setValue(10);//this is not working
                                            model2->setRowCount(rows2);
                                          }
                                          

                                          if i setvalue 10 then that no. of rows should be there

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

                                          @n-2204 said in spinbox input add rows ??:

                                          ui.spinBox->setValue(10);//this is not working

                                          Don't what you mean. "Not working" could indicate anything. I imagine this works perfectly well.

                                          how can i set value of a spinbox and also edittable for user ?

                                          if i setvalue 10 then that no. of rows should be there

                                          Don't know what these mean either.

                                          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