Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • 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.7k 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.
  • 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
                      • Unsolved