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. how to write integer to QTableWidget
Qt 6.11 is out! See what's new in the release blog

how to write integer to QTableWidget

Scheduled Pinned Locked Moved Solved General and Desktop
12 Posts 4 Posters 1.4k Views 2 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.
  • L Offline
    L Offline
    Leopold
    wrote on last edited by
    #1

    Hello,
    have a new problem.I get some numbers from a QTableWidget.Then I do some mathematics with these and want to write the result to a second QTableWidget.
    Programm does the mathematic but when its up to writing to the second Widget I get a segmentation fault```
    double mbar1=0;
    double druck1=0;
    QString drehz,druck;

    void MainWindow::on_sparkadv_clicked()
    {
    int r=m_ui->logfilewidget->rowCount();
    for(int i = 1; i <12; ++i)
    { m_ui->average->insertRow(i);}
    for (int i = 1; i <r; ++i)
    {

        drehz = m_ui->logfilewidget->item(i,1)->text();
        druck = m_ui->logfilewidget->item(i,6)->text();
    
                if (drehz<1000)
                     {
                     druck1 =druck1 + druck.toDouble();}
                     }
    
    int durchschnitt1=druck1/r;
    m_ui->average->item(5,5)->setText(QString::number(durchschnitt1).toStdString().c_str());
    

    }

    inline void QTableWidgetItem::setText(const QString &atext)
    { setData(Qt::DisplayRole, atext); }

    Thank you for your help!
    Leopold
    aha_1980A 1 Reply Last reply
    0
    • L Offline
      L Offline
      Leopold
      wrote on last edited by
      #2

      sorry some text is missing:
      here it stops in the qtablewidget.h

      inline void QTableWidgetItem::setText(const QString &atext)
      { setData(Qt::DisplayRole, atext); }
      
      aha_1980A 1 Reply Last reply
      0
      • L Leopold

        sorry some text is missing:
        here it stops in the qtablewidget.h

        inline void QTableWidgetItem::setText(const QString &atext)
        { setData(Qt::DisplayRole, atext); }
        
        aha_1980A Offline
        aha_1980A Offline
        aha_1980
        Lifetime Qt Champion
        wrote on last edited by
        #3

        Hi @Leopold,

        start the program in a debugger. When it crashes, inpect the stack trace to find the root of the crash.

        Regards

        Qt has to stay free or it will die.

        1 Reply Last reply
        2
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #4

          Hi,

          If there's a segmentation fault then you are accessing something that does not exists. You can use the debugger to find out what is going on.

          I would guess that you are accessing a non existing item.

          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
          1
          • mrjjM Offline
            mrjjM Offline
            mrjj
            Lifetime Qt Champion
            wrote on last edited by
            #5

            Hi
            do note that ->item(row,col) can return a NULL if no item is assigned and that is
            instant crash.

            You do
            for(int i = 1; i <12; ++i)
            m_ui->average->insertRow(i);}

            But i don't see you assign any QTableWidgetItem and as far as i know insertRow
            inserts empty row so
            m_ui->average->item(5,5) might return NULL;

            1 Reply Last reply
            2
            • L Leopold

              Hello,
              have a new problem.I get some numbers from a QTableWidget.Then I do some mathematics with these and want to write the result to a second QTableWidget.
              Programm does the mathematic but when its up to writing to the second Widget I get a segmentation fault```
              double mbar1=0;
              double druck1=0;
              QString drehz,druck;

              void MainWindow::on_sparkadv_clicked()
              {
              int r=m_ui->logfilewidget->rowCount();
              for(int i = 1; i <12; ++i)
              { m_ui->average->insertRow(i);}
              for (int i = 1; i <r; ++i)
              {

                  drehz = m_ui->logfilewidget->item(i,1)->text();
                  druck = m_ui->logfilewidget->item(i,6)->text();
              
                          if (drehz<1000)
                               {
                               druck1 =druck1 + druck.toDouble();}
                               }
              
              int durchschnitt1=druck1/r;
              m_ui->average->item(5,5)->setText(QString::number(durchschnitt1).toStdString().c_str());
              

              }

              inline void QTableWidgetItem::setText(const QString &atext)
              { setData(Qt::DisplayRole, atext); }

              Thank you for your help!
              Leopold
              aha_1980A Offline
              aha_1980A Offline
              aha_1980
              Lifetime Qt Champion
              wrote on last edited by
              #6

              @Leopold said in how to write integer to QTableWidget:

              @mrjj is fully right with the nullptr. By the way:

              m_ui->average->item(5,5)->setText(QString::number(durchschnitt1).toStdString().c_str());

              can be more simply written as:

              m_ui->average->item(5,5)->setText(QString::number(durchschnitt1));

              Qt has to stay free or it will die.

              L 1 Reply Last reply
              3
              • L Offline
                L Offline
                Leopold
                wrote on last edited by
                #7

                Hi mrjj,
                I had extra inserted this loop, because i thaught .possibly it will not recognice the rows.No help after deleting that row.

                @ SGaist and aha_1980

                yes debuging should resolve that problem.But Iam not used to debugging.I know already that inserting stops in line 188 from qtablewidget.h , thats why I attached the code where it stops. I do not know if "setData(Qt::DisplayRole, atext); " corresponds with
                "setText(QString::number(durchschnitt1).toStdString().c_str()"
                Debugger says "Wert" of atext = "0"

                1 Reply Last reply
                0
                • aha_1980A aha_1980

                  @Leopold said in how to write integer to QTableWidget:

                  @mrjj is fully right with the nullptr. By the way:

                  m_ui->average->item(5,5)->setText(QString::number(durchschnitt1).toStdString().c_str());

                  can be more simply written as:

                  m_ui->average->item(5,5)->setText(QString::number(durchschnitt1));

                  L Offline
                  L Offline
                  Leopold
                  wrote on last edited by
                  #8

                  @aha_1980

                  that was one of my first tries, always segmentation fault.

                  aha_1980A L 2 Replies Last reply
                  0
                  • L Leopold

                    @aha_1980

                    that was one of my first tries, always segmentation fault.

                    aha_1980A Offline
                    aha_1980A Offline
                    aha_1980
                    Lifetime Qt Champion
                    wrote on last edited by
                    #9

                    @Leopold

                    But Iam not used to debugging.

                    Then learn it. Take the 15 minutes for this video, for example: https://www.youtube.com/watch?v=B7UsWtyhXh4

                    that was one of my first tries, always segmentation fault.

                    If you use the debugger, it will probably tell you that you access a nullptr.

                    AS @mrjj said:

                    But i don't see you assign any QTableWidgetItem and as far as i know insertRow
                    inserts empty row so
                    m_ui->average->item(5,5) might return NULL;

                    You need to insert a QTableWidgetItem first.

                    Regards

                    Qt has to stay free or it will die.

                    1 Reply Last reply
                    3
                    • SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #10

                      Additional note: QTableWidget::insertRow explicitly state: Inserts an empty row into the table at row. The crucial word here is: empty. There's no item there.

                      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
                      2
                      • L Leopold

                        @aha_1980

                        that was one of my first tries, always segmentation fault.

                        L Offline
                        L Offline
                        Leopold
                        wrote on last edited by
                        #11

                        @Leopold

                        i could figure out that my mathematics does not work, i am trying to solve that problem and will report again!

                        1 Reply Last reply
                        0
                        • L Offline
                          L Offline
                          Leopold
                          wrote on last edited by
                          #12

                          Thank you for the help, now its working, i have added a counter for the division and changed the write comand.

                          double mbar1=0;
                          double druck1=0;
                          QString drehz,druck;
                          double durchschnitt1;
                          int durchschnitt;
                          double s=0;
                          void MainWindow::on_sparkadv_clicked()
                          {
                              int r=m_ui->logfilewidget->rowCount();
                          
                                   for (int i = 1; i <r; ++i)
                                           {
                                           drehz = m_ui->logfilewidget->item(i,1)->text();
                                           druck = m_ui->logfilewidget->item(i,6)->text();
                          
                                          if (drehz<1000)
                                               {
                                               druck1 = druck1 + druck.toDouble();
                                               s=s+1;
                                               }
                                              }
                                          double durchschnitt1 = druck1 / s;
                                          int durchschnitt=durchschnitt1;
                                    
                                     m_ui->average->setItem(5,5,new QTableWidgetItem(QString::number(durchschnitt)));
                                }
                          
                          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