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. Adding qtablewidget items to vector
Forum Updated to NodeBB v4.3 + New Features

Adding qtablewidget items to vector

Scheduled Pinned Locked Moved Unsolved General and Desktop
13 Posts 4 Posters 1.4k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    SGaist
    Lifetime Qt Champion
    wrote on 20 Dec 2019, 19:04 last edited by
    #4

    Hi,

    What row does it get ?

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

    1 Reply Last reply
    0
    • K Kiboshi
      20 Dec 2019, 13:38

      Below is my approach. But it does not get the last row of my qtablewidget. "Input_table" is the name of my qtablewidget.

      std::vector<int> tableoperatations::getdestination()
      {
      std::vector <int> destination;
      int row = this->input_table->rowCount()-1;
      for(int i=0;i<=this->input_table->columnCount();i++)
      {
      destination.push_back(this->input_table->item(row, i)->text().toInt());
      }
      return destination;
      }

      J Offline
      J Offline
      JonB
      wrote on 20 Dec 2019, 19:35 last edited by JonB
      #5

      @Kiboshi said in Adding qtablewidget items to vector:

      for(int i=0;i<=this->input_table->columnCount();i++)
      destination.push_back(this->input_table->item(row, i)->text().toInt());

      I'm not saying it's your issue, but this does not look good. Does item(row, i) not error? i <= this->input_table->columnCount(), that <=?

      1 Reply Last reply
      3
      • K Offline
        K Offline
        Kiboshi
        wrote on 20 Dec 2019, 21:48 last edited by
        #6
        This post is deleted!
        1 Reply Last reply
        0
        • K Offline
          K Offline
          Kiboshi
          wrote on 20 Dec 2019, 22:03 last edited by
          #7

          Currently I am facing a problem where my destination vector is inacessible when I debug the program. However my "source" vector has successfully obtain only the last column.

          Below is my code:

          tableoperatations::tableoperatations(QWidget *parent, int a, int b) : QDialog(parent)
          {
          input_table = new QTableWidget;
          input_table->setRowCount(a+1);
          input_table->setColumnCount(b+1);
          for(int i=0;i<b;++i){
          input_table->setHorizontalHeaderItem(i, new QTableWidgetItem);
          Q_ASSUME(input_table->model()->setHeaderData(i,Qt::Horizontal,QStringLiteral("D%1").arg(i+1)));
          }
          for(int i=0;i<a;++i){
          input_table->setVerticalHeaderItem(i, new QTableWidgetItem);
          Q_ASSUME(input_table->model()->setHeaderData(i,Qt::Vertical,QStringLiteral("S%1").arg(i+1)));
          }
          for (int i = 0; i < input_table->rowCount(); i++){
          for (int j = 0; j < input_table->columnCount(); j++) {
          QTableWidgetItem *item = new
          QTableWidgetItem(tr("-"));
          input_table->setItem(i, j, item);
          }
          }
          input_table->setVerticalHeaderItem(a, new QTableWidgetItem);
          input_table->model()->setHeaderData(a,Qt::Vertical,QStringLiteral("Demand"));
          input_table->setHorizontalHeaderItem(b, new QTableWidgetItem);
          input_table->model()->setHeaderData(b,Qt::Horizontal,QStringLiteral("Supply"));
          input_table->removeCellWidget(a,b);
          calc_button = new QPushButton("Calculate", this);
          connect(calc_button, SIGNAL (clicked()),this, SLOT (calculate()));
          result=new QTextEdit("");
          QHBoxLayout *layout = new QHBoxLayout;
          layout->addWidget(input_table);
          layout->addWidget(calc_button);
          layout->addWidget(result);
          setLayout(layout);
          }

          std::vector<int> tableoperatations::getdestination()
          {
          std::vector <int> destination;
          int row = this->input_table->rowCount();
          for(int i=0;i<this->input_table->columnCount();i++)
          {
          destination.push_back(this->input_table->item(i, row)->text().toInt());
          }
          return destination;
          }

          std::vector<int> tableoperatations::getsource()
          {
          std::vector <int> source;
          int column = this->input_table->columnCount()-1;
          for(int j=0;j<=this->input_table->rowCount();j++)
          {
          source.push_back(this->input_table->item(j, column)->text().toInt());
          }
          return source;
          }

          J 1 Reply Last reply 20 Dec 2019, 22:11
          0
          • K Kiboshi
            20 Dec 2019, 22:03

            Currently I am facing a problem where my destination vector is inacessible when I debug the program. However my "source" vector has successfully obtain only the last column.

            Below is my code:

            tableoperatations::tableoperatations(QWidget *parent, int a, int b) : QDialog(parent)
            {
            input_table = new QTableWidget;
            input_table->setRowCount(a+1);
            input_table->setColumnCount(b+1);
            for(int i=0;i<b;++i){
            input_table->setHorizontalHeaderItem(i, new QTableWidgetItem);
            Q_ASSUME(input_table->model()->setHeaderData(i,Qt::Horizontal,QStringLiteral("D%1").arg(i+1)));
            }
            for(int i=0;i<a;++i){
            input_table->setVerticalHeaderItem(i, new QTableWidgetItem);
            Q_ASSUME(input_table->model()->setHeaderData(i,Qt::Vertical,QStringLiteral("S%1").arg(i+1)));
            }
            for (int i = 0; i < input_table->rowCount(); i++){
            for (int j = 0; j < input_table->columnCount(); j++) {
            QTableWidgetItem *item = new
            QTableWidgetItem(tr("-"));
            input_table->setItem(i, j, item);
            }
            }
            input_table->setVerticalHeaderItem(a, new QTableWidgetItem);
            input_table->model()->setHeaderData(a,Qt::Vertical,QStringLiteral("Demand"));
            input_table->setHorizontalHeaderItem(b, new QTableWidgetItem);
            input_table->model()->setHeaderData(b,Qt::Horizontal,QStringLiteral("Supply"));
            input_table->removeCellWidget(a,b);
            calc_button = new QPushButton("Calculate", this);
            connect(calc_button, SIGNAL (clicked()),this, SLOT (calculate()));
            result=new QTextEdit("");
            QHBoxLayout *layout = new QHBoxLayout;
            layout->addWidget(input_table);
            layout->addWidget(calc_button);
            layout->addWidget(result);
            setLayout(layout);
            }

            std::vector<int> tableoperatations::getdestination()
            {
            std::vector <int> destination;
            int row = this->input_table->rowCount();
            for(int i=0;i<this->input_table->columnCount();i++)
            {
            destination.push_back(this->input_table->item(i, row)->text().toInt());
            }
            return destination;
            }

            std::vector<int> tableoperatations::getsource()
            {
            std::vector <int> source;
            int column = this->input_table->columnCount()-1;
            for(int j=0;j<=this->input_table->rowCount();j++)
            {
            source.push_back(this->input_table->item(j, column)->text().toInt());
            }
            return source;
            }

            J Offline
            J Offline
            JonB
            wrote on 20 Dec 2019, 22:11 last edited by JonB
            #8

            @Kiboshi said in Adding qtablewidget items to vector:

            int row = this->input_table->rowCount();
            for(int i=0;i<this->input_table->columnCount();i++)
            {
            destination.push_back(this->input_table->item(i, row)->text().toInt());

            Now row is out of range.

            for(int j=0;j<=this->input_table->rowCount();j++)
            {
            source.push_back(this->input_table->item(j, column)->text().toInt());

            Same for j.

            getdestination() uses a fixed row and varies the column. getsource() uses a varying row and a fixed column. Why is that?

            getdestination() uses row = rowCount() to access input_table->item(i, row), i.e. as a column index. Why is that?

            You really need to sort out your column & row indexes.

            K 1 Reply Last reply 20 Dec 2019, 23:27
            0
            • K Offline
              K Offline
              Kiboshi
              wrote on 20 Dec 2019, 22:27 last edited by
              #9

              My bad. Now i have fixed it but my "destination" vector is not accessible still. Any help would be appreciated. Thanks

              tableoperatations::tableoperatations(QWidget *parent, int a, int b) : QDialog(parent)
              {
              input_table = new QTableWidget;
              input_table->setRowCount(a+1);
              input_table->setColumnCount(b+1);
              for(int i=0;i<b;++i){
              input_table->setHorizontalHeaderItem(i, new QTableWidgetItem);
              Q_ASSUME(input_table->model()->setHeaderData(i,Qt::Horizontal,QStringLiteral("D%1").arg(i+1)));
              }
              for(int i=0;i<a;++i){
              input_table->setVerticalHeaderItem(i, new QTableWidgetItem);
              Q_ASSUME(input_table->model()->setHeaderData(i,Qt::Vertical,QStringLiteral("S%1").arg(i+1)));
              }
              for (int i = 0; i < input_table->rowCount(); i++){
              for (int j = 0; j < input_table->columnCount(); j++) {
              QTableWidgetItem *item = new
              QTableWidgetItem(tr("-"));
              input_table->setItem(i, j, item);
              }
              }
              input_table->setVerticalHeaderItem(a, new QTableWidgetItem);
              input_table->model()->setHeaderData(a,Qt::Vertical,QStringLiteral("Demand"));
              input_table->setHorizontalHeaderItem(b, new QTableWidgetItem);
              input_table->model()->setHeaderData(b,Qt::Horizontal,QStringLiteral("Supply"));
              input_table->removeCellWidget(a,b);
              calc_button = new QPushButton("Calculate", this);
              connect(calc_button, SIGNAL (clicked()),this, SLOT (calculate()));
              result=new QTextEdit("");
              QHBoxLayout *layout = new QHBoxLayout;
              layout->addWidget(input_table);
              layout->addWidget(calc_button);
              layout->addWidget(result);
              setLayout(layout);
              }

              std::vector<std::vector<int>> tableoperatations::getcost()
              {
              std::vector<std::vector <int>> cost;
              for(int i=0;i<this->input_table->rowCount()-1;i++)
              {
              std::vector <int> row;
              for(int j=0;j<this->input_table->columnCount()-1;j++)
              {
              row.push_back(this->input_table->item(i, j)->text().toInt());
              }
              cost.push_back(row);
              }
              return cost;
              }

              std::vector<int> tableoperatations::getdestination()
              {
              std::vector <int> destination;
              int row = this->input_table->rowCount();
              for(int i=0;i<this->input_table->columnCount();i++)
              {
              destination.push_back(this->input_table->item(row,i)->text().toInt());
              }
              return destination;
              }

              std::vector<int> tableoperatations::getsource()
              {
              std::vector <int> source;
              int column = this->input_table->columnCount()-1;
              for(int j=0;j<=this->input_table->rowCount();j++)
              {
              source.push_back(this->input_table->item(j, column)->text().toInt());
              }
              return source;
              }

              J 1 Reply Last reply 20 Dec 2019, 22:30
              0
              • K Kiboshi
                20 Dec 2019, 22:27

                My bad. Now i have fixed it but my "destination" vector is not accessible still. Any help would be appreciated. Thanks

                tableoperatations::tableoperatations(QWidget *parent, int a, int b) : QDialog(parent)
                {
                input_table = new QTableWidget;
                input_table->setRowCount(a+1);
                input_table->setColumnCount(b+1);
                for(int i=0;i<b;++i){
                input_table->setHorizontalHeaderItem(i, new QTableWidgetItem);
                Q_ASSUME(input_table->model()->setHeaderData(i,Qt::Horizontal,QStringLiteral("D%1").arg(i+1)));
                }
                for(int i=0;i<a;++i){
                input_table->setVerticalHeaderItem(i, new QTableWidgetItem);
                Q_ASSUME(input_table->model()->setHeaderData(i,Qt::Vertical,QStringLiteral("S%1").arg(i+1)));
                }
                for (int i = 0; i < input_table->rowCount(); i++){
                for (int j = 0; j < input_table->columnCount(); j++) {
                QTableWidgetItem *item = new
                QTableWidgetItem(tr("-"));
                input_table->setItem(i, j, item);
                }
                }
                input_table->setVerticalHeaderItem(a, new QTableWidgetItem);
                input_table->model()->setHeaderData(a,Qt::Vertical,QStringLiteral("Demand"));
                input_table->setHorizontalHeaderItem(b, new QTableWidgetItem);
                input_table->model()->setHeaderData(b,Qt::Horizontal,QStringLiteral("Supply"));
                input_table->removeCellWidget(a,b);
                calc_button = new QPushButton("Calculate", this);
                connect(calc_button, SIGNAL (clicked()),this, SLOT (calculate()));
                result=new QTextEdit("");
                QHBoxLayout *layout = new QHBoxLayout;
                layout->addWidget(input_table);
                layout->addWidget(calc_button);
                layout->addWidget(result);
                setLayout(layout);
                }

                std::vector<std::vector<int>> tableoperatations::getcost()
                {
                std::vector<std::vector <int>> cost;
                for(int i=0;i<this->input_table->rowCount()-1;i++)
                {
                std::vector <int> row;
                for(int j=0;j<this->input_table->columnCount()-1;j++)
                {
                row.push_back(this->input_table->item(i, j)->text().toInt());
                }
                cost.push_back(row);
                }
                return cost;
                }

                std::vector<int> tableoperatations::getdestination()
                {
                std::vector <int> destination;
                int row = this->input_table->rowCount();
                for(int i=0;i<this->input_table->columnCount();i++)
                {
                destination.push_back(this->input_table->item(row,i)->text().toInt());
                }
                return destination;
                }

                std::vector<int> tableoperatations::getsource()
                {
                std::vector <int> source;
                int column = this->input_table->columnCount()-1;
                for(int j=0;j<=this->input_table->rowCount();j++)
                {
                source.push_back(this->input_table->item(j, column)->text().toInt());
                }
                return source;
                }

                J Offline
                J Offline
                JonB
                wrote on 20 Dec 2019, 22:30 last edited by JonB
                #10

                @Kiboshi
                You haven't fixed all the points, can't keep saying the same things. Get your loop limits correct. There's no point keep pasting whole code without addressing the issues.

                1 Reply Last reply
                1
                • J JonB
                  20 Dec 2019, 22:11

                  @Kiboshi said in Adding qtablewidget items to vector:

                  int row = this->input_table->rowCount();
                  for(int i=0;i<this->input_table->columnCount();i++)
                  {
                  destination.push_back(this->input_table->item(i, row)->text().toInt());

                  Now row is out of range.

                  for(int j=0;j<=this->input_table->rowCount();j++)
                  {
                  source.push_back(this->input_table->item(j, column)->text().toInt());

                  Same for j.

                  getdestination() uses a fixed row and varies the column. getsource() uses a varying row and a fixed column. Why is that?

                  getdestination() uses row = rowCount() to access input_table->item(i, row), i.e. as a column index. Why is that?

                  You really need to sort out your column & row indexes.

                  K Offline
                  K Offline
                  Kiboshi
                  wrote on 20 Dec 2019, 23:27 last edited by
                  #11

                  @JonB In getdestination(), Im trying to get all the user input in the last row of my table. Meanwhile in getsource(), Im trying to get all the user input in the last column of the table.
                  Screen Shot 2019-12-21 at 02.26.57.png

                  In this case, vector destination would be[2,3,4,0] and vector source would be[2,5,3,0]

                  1 Reply Last reply
                  0
                  • K Offline
                    K Offline
                    Kiboshi
                    wrote on 21 Dec 2019, 01:15 last edited by
                    #12

                    I was able to solve this problem. Thanks @SGaist @JonB @LeLev for your effort.

                    J 1 Reply Last reply 21 Dec 2019, 08:30
                    0
                    • K Kiboshi
                      21 Dec 2019, 01:15

                      I was able to solve this problem. Thanks @SGaist @JonB @LeLev for your effort.

                      J Offline
                      J Offline
                      JonB
                      wrote on 21 Dec 2019, 08:30 last edited by
                      #13

                      @Kiboshi

                      int row = this->input_table->rowCount();
                      for(int j=0;j<=this->input_table->rowCount();j++)

                      I trust you altered at least the above two lines!

                      1 Reply Last reply
                      2

                      13/13

                      21 Dec 2019, 08:30

                      • Login

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