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. QList::at(int i) Sigsegv crashes by segmentation fault
Qt 6.11 is out! See what's new in the release blog

QList::at(int i) Sigsegv crashes by segmentation fault

Scheduled Pinned Locked Moved General and Desktop
14 Posts 4 Posters 6.6k Views 1 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.
  • U Offline
    U Offline
    ufukyasar
    wrote on last edited by
    #1

    im programming a simple database program using qsqlite i want to bring checkbox controls dynamically for selecteing or unselecting records i hava a like QList<QCheckBox *> select
    when i add checkbox to tablewidget it crashes on line select.at(i).
    i debugged when i is zero it works quite well but when i inreases to 1 it crashes.

    i hope for your helps.

    1 Reply Last reply
    0
    • ? Offline
      ? Offline
      A Former User
      wrote on last edited by
      #2

      Hey,

      I think we need some more code to see whats going on.

      If you want to get the i th ... have you checked if the QList is that long already ?

      regards

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

        Hi and welcome to devnet,

        In addtion to what whoami asked, are you sure that you have a valid pointer in your QList at that position ?

        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
        • U Offline
          U Offline
          ufukyasar
          wrote on last edited by
          #4

          in mainwindow.h

          @
          private:
          QList<QCheckBox*> sec;
          @

          @QWidget *pwidget= new QWidget();
          QHBoxLayout *plyout=new QHBoxLayout(pwidget);
          QCheckBox *qchk=new QCheckBox("CheckBox"+QString::number(i));
          qchk->setText("");
          sec.append(qchk);
          plyout->addWidget(sec.at(sec.last()));
          plyout->setContentsMargins(0,0,0,0);
          plyout->setAlignment(Qt::AlignCenter);
          pwidget->setLayout(plyout);

                                  ui->tableWidget->setCellWidget(i,(alanlar.split(";")).count()-1, pwidget);
                                  ui->tableWidget->setColumnWidth(3,50);
                                  qchk->setText("");@
          

          this code is from a function which this works well but that gives error when if satir increases to 1

          @
          void MainWindow::on_ara_clicked() {

          qDebug()<<"search clicked";
          qDebug()<<sqlquery;
          QSqlQuery q=dbq.exec(sqlquery);
          ui->aramasonuclari->clearContents();
          ui->aramasonuclari->setRowCount(0);
          ui->aramasonuclari->setColumnCount(0);
          foreach (QString s, alanlar.split(";")) {
          ui->aramasonuclari->insertColumn(ui->aramasonuclari->columnCount());
          }
          ui->aramasonuclari->setHorizontalHeaderLabels(alanlar.split(";"));
          int satir=0;
          while (q.next()) {
          ui->aramasonuclari->insertRow(ui->aramasonuclari->rowCount());
          qDebug()<<"row inserted";
          for(int i=0;i<(alanlar.split(";")).count()-1;i++) {
          ui->aramasonuclari->setItem(satir,i, new QTableWidgetItem(q.value(i).toString()));
          qDebug()<<"tablewidget content inserted "+QString::number(satir)+"-"+QString::number(i);
          }

              QWidget *pwidget= new QWidget();
              QHBoxLayout *plyout=new QHBoxLayout(pwidget);
              qDebug()<<"counts of Checkbox in sec:"+QString::number(sec.count());
              plyout->addWidget(sec.at(satir));
              plyout->setContentsMargins(0,0,0,0);
              plyout->setAlignment(Qt::AlignCenter);
              pwidget->setLayout(plyout);
          
              ui->aramasonuclari->setCellWidget(satir,(alanlar.split(";")).count()-1,pwidget);
          
              satir++;
          }
          

          }

          @

          1 Reply Last reply
          0
          • A Offline
            A Offline
            andre
            wrote on last edited by
            #5

            Might I suggest another solution entirely?

            Would it not be much easier and cleaner to use a QTableView instead of a QTableWidget for your data? You can then simply use a QSqlTableModel or a QSqlQueryModel to place your data in your view.

            If you want to add a checkbox to select records, may I suggest my own "CheckableProxyModel":/wiki/QSortFilterProxyModel_subclass_to_add_a_checkbox ? That will make it almost trivial to add the requested checkbox, without you having to manage a load of QCheckBox widgets (very inefficient for larger data sets).

            1 Reply Last reply
            0
            • U Offline
              U Offline
              ufukyasar
              wrote on last edited by
              #6

              thanks andre for your reply but iwant to solve the problem in this code,
              im new at qt and this is amy first program and it is a tutorial for me,
              so i must go on on my way,

              can anybody help me on my solution. why it doesnt works when satir increases to 1, i think pointers value had been changed already when i call sec.at(satir) so there is not a checkbox
              so what must i do if i dont want to change in the pointer sec.at(i) during it runs.

              1 Reply Last reply
              0
              • A Offline
                A Offline
                andre
                wrote on last edited by
                #7

                Ok, fair enough. Lets look at your current code then.

                Could you tell us on which line in this code you get your error? Run your application in debug mode to find out.

                1 Reply Last reply
                0
                • U Offline
                  U Offline
                  ufukyasar
                  wrote on last edited by
                  #8

                  it crashes on
                  @plyout->addWidget(sec.at(satir));@
                  it works well when satir is zero but when increases to 1 it crashes

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

                    I only see one QCheckBox instantiation and not in on_ara_clicked so my guess is that you are not allocating the your checkbox correctly

                    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
                    • A Offline
                      A Offline
                      andre
                      wrote on last edited by
                      #10

                      So... What are the contents your sec at the moment of the crash? I see that something is appended to it in the top snippet, but it is unclear if that code is ran just once or multiple times. If it is only ran once, then sec will only contain a single item, so your crash is logical: there is no sec.at(1).

                      1 Reply Last reply
                      0
                      • ? Offline
                        ? Offline
                        A Former User
                        wrote on last edited by
                        #11

                        First thing I would try is to check the length of your QList.
                        Something like if(sec.size() > 1) ...

                        I am just guessing so I do not know if sec has to be bigger than 1 but you have to figure out why it is not.

                        1 Reply Last reply
                        0
                        • U Offline
                          U Offline
                          ufukyasar
                          wrote on last edited by
                          #12

                          sec is 3 bigger then 1
                          @qDebug()<<QString::number(sec.size());@
                          and gives 3

                          1 Reply Last reply
                          0
                          • A Offline
                            A Offline
                            andre
                            wrote on last edited by
                            #13

                            But what is in there? Try:

                            @
                            qDebug() << sec;
                            @

                            1 Reply Last reply
                            0
                            • U Offline
                              U Offline
                              ufukyasar
                              wrote on last edited by
                              #14

                              i found error but dont know how to solve it
                              @QSqlDatabase dbq;@
                              in my mainwindow.h and i use it on a function which opens database and writes contents to table widget. that works quiet well
                              heres code
                              @
                              void MainWindow::on_veritabaniac_clicked() {
                              ui->tableWidget->setShowGrid(true);
                              dbq=QSqlDatabase::addDatabase("QSQLITE");
                              if (QFile::exists("test.devel.db")) {

                                      dbq.setDatabaseName("test.devel.db");
                                      
                                                  if (dbq.open()) {
                                                      veritabaniacik=true;
                                                  QSqlQuery cnames=dbq.exec&#40;"PRAGMA table_info(main&#41;"&#41;;
                                                  while (cnames.next(&#41;) {
                                                      alanlar.append(cnames.value(1).toString());
                                                      alanlar.append(";");
                                                      ui->tableWidget->insertColumn(ui->tableWidget->columnCount());
                                                      qDebug()<<"alanlar oluşturuldu";
                                                  }
                                                  ui->tableWidget->insertColumn(ui->tableWidget->columnCount());
                                                  alanlar.append("Seç");
                                                  int i=0;
                                                  ui->tableWidget->setHorizontalHeaderLabels(alanlar.split(";"));
                                                  QSqlQuery result=dbq.exec&#40;"SELECT * FROM main"&#41;;
                                                  while (result.next(&#41;&#41; {
                                                      ui->tableWidget->insertRow(ui->tableWidget->rowCount());
                                                      for(int s=0;s<alanlar.count()-1;s++) {
                                                          ui->tableWidget->setItem(i,s, new QTableWidgetItem(result.value(s).toString()));
                                                      }
                                                      ….
                              

                              }
                              @

                              yes it works but when i run a similar function like this
                              result.size() is -1 it has no records

                              @

                                      it=sec.begin();
                                      
                                  ui->tableWidget->setRowCount(0);
                                  ui->tableWidget->setColumnCount(0);
                              
                                  qDebug()<<QString::number(alanlar.split(";").count());
                                  for (int alsay=0;alsay<alanlar.split(";").count();alsay++)
                                      ui->tableWidget->insertColumn(ui->tableWidget->columnCount());
                                
                                  int i=0;
                                  ui->tableWidget->setHorizontalHeaderLabels(alanlar.split(";"));
                                  QSqlQuery rslt=dbq.exec&#40;"SELECT * FROM main"&#41;;
                                  qDebug(&#41;<<QString::number(rslt.size(&#41;);                                //it gives -1*******
                                  while (rslt.next()) {
                                      ui->tableWidget->insertRow(ui->tableWidget->rowCount());,
                                      for(int s=0;s<(alanlar.split(";").count());s++) {
                                          ui->tableWidget->setItem(i,s, new QTableWidgetItem(rslt.value(s).toString()));
                                         
                                      }
                              

                              ….
                              i++;
                              it++;
                              }
                              }
                              @

                              and i must say i have changed my QList<QCheckBox*> sec;
                              to QLinkedList<QCheckBox*> sec; and its iterator is
                              QLinkedList<QCheckBox*>::iterator it;
                              i hope your helps

                              Edit: I have cleaned up the thread a bit by removing posts about formatting and attempts to post a re-formatted version of the code here; Andre

                              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