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.
  • K Offline
    K Offline
    Kiboshi
    wrote on last edited by
    #3

    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;
    }

    JonBJ 1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on 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

        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;
        }

        JonBJ Online
        JonBJ Online
        JonB
        wrote on 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 last edited by
          #6
          This post is deleted!
          1 Reply Last reply
          0
          • K Offline
            K Offline
            Kiboshi
            wrote on 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;
            }

            JonBJ 1 Reply Last reply
            0
            • K Kiboshi

              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;
              }

              JonBJ Online
              JonBJ Online
              JonB
              wrote on 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
              0
              • K Offline
                K Offline
                Kiboshi
                wrote on 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;
                }

                JonBJ 1 Reply Last reply
                0
                • K Kiboshi

                  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;
                  }

                  JonBJ Online
                  JonBJ Online
                  JonB
                  wrote on 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
                  • JonBJ JonB

                    @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 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 last edited by
                      #12

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

                      JonBJ 1 Reply Last reply
                      0
                      • K Kiboshi

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

                        JonBJ Online
                        JonBJ Online
                        JonB
                        wrote on 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

                        • Login

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