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

how to write integer to QTableWidget

Scheduled Pinned Locked Moved Solved General and Desktop
12 Posts 4 Posters 1.2k 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