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. Segmentation fault in setupUi() method
Qt 6.11 is out! See what's new in the release blog

Segmentation fault in setupUi() method

Scheduled Pinned Locked Moved General and Desktop
5 Posts 3 Posters 4.5k 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.
  • ? This user is from outside of this forum
    ? This user is from outside of this forum
    Guest
    wrote on last edited by
    #1

    Hello everyone,

    I'm experiencing a strange error with a dialog box. I designed the dialog box with QtDesigner and used multi-inheritance to code it's functionality. When I launch the dialog box, I receive a segmentation fault. The debugger indicates that it's this line which causes the error
    @ label->setObjectName(QString::fromUtf8("label"));
    @
    which is in the setupUi() method of my dialog box.

    And I have this message in the application output
    @*** glibc detected *** /home/shiru/projects/app-build-desktop-release/bin/app: corrupted double-linked list: 0x0850e208 ***
    @
    followed by a backtrace
    @======= Backtrace: =========
    /lib/i386-linux-gnu/libc.so.6(+0x6b961)[0x1036961]
    /lib/i386-linux-gnu/libc.so.6(+0x6e99c)[0x103999c]
    /lib/i386-linux-gnu/libc.so.6(__libc_malloc+0x63)[0x103af53]
    /usr/lib/libQtCore.so.4(_Z7qMallocj+0x1d)[0xc4db8d]
    /usr/lib/libQtCore.so.4(_ZN7QStringC1EiN2Qt14InitializationE+0x2c)[0xc9a07c]
    /usr/lib/libQtCore.so.4(+0x18bd7a)[0xd7ed7a]
    /usr/lib/libQtCore.so.4(_ZN7QString8fromUtf8EPKci+0x43)[0xc9bf33]
    /home/shiru/projects/app-build-desktop-release/plugins/libdsale.so(_ZN17Ui_MakeSaleDialog7setupUiEP7QDialog+0x1d8)[0x2d7b39e]
    /home/shiru/projects/app-build-desktop-release/plugins/libdsale.so(_ZN14MakeSaleDialogC2EP7QWidget+0xb2)[0x2d796ca]
    /home/shiru/projects/app-build-desktop-release/plugins/libdsale.so(_ZN14SaleMainWidget8makeSaleEv+0x33)[0x2d70ebf]
    /home/shiru/projects/app-build-desktop-release/plugins/libdsale.so(_ZN14SaleMainWidget11qt_metacallEN11QMetaObject4CallEiPPv+0x8a)[0x2d8c114]
    /usr/lib/libQtCore.so.4(_ZN11QMetaObject8metacallEP7QObjectNS_4CallEiPPv+0x3a)[0xd4e6ba]
    ....@

    But sometimes, I have this in the application output
    @*** glibc detected *** /home/shiru/projects/app-build-desktop-release/bin/app: realloc(): invalid old size: 0x08598a50 ***
    @

    And the debugger indicates another line in the setupUi() method

    @priceSpinBox->setMinimum(1);
    @

    I don't understand this problem, can someone help me ?

    I'm using Qt 4.7.2 on Ubuntu 11.04.

    Thank you.

    1 Reply Last reply
    0
    • P Offline
      P Offline
      p-himik
      wrote on last edited by
      #2

      Maybe these lines don't cause errors. Try to put some qDebug() around these lines and see your app's output.

      1 Reply Last reply
      0
      • L Offline
        L Offline
        lgeyer
        wrote on last edited by
        #3

        Please provide a more complete example, especially code showing the call to setupUi(). Your memory most likely gets corrupted long before the code you've shown.

        1 Reply Last reply
        0
        • ? This user is from outside of this forum
          ? This user is from outside of this forum
          Guest
          wrote on last edited by
          #4

          This is the complete code of my class

          @#include "makesaledialog.h"

          #include <QtCore/QDebug>
          #include <QtCore/QDate>
          #include <QtCore/QSettings>
          #include <QtGui/QCloseEvent>
          #include <QtGui/QCompleter>

          #include <sale/sale.h>
          #include <sale/sqlmodels/vendormodel.h>
          #include <sale/sqlmodels/customermodel.h>
          #include <sale/sqlmodels/salemodel.h>

          #include <repository/repository.h>
          #include <repository/repositoryproduct.h>
          #include <repository/sqlmodels/repositorymodel.h>

          #include <utils.h>

          using namespace Px;

          MakeSaleDialog::MakeSaleDialog(QWidget *parent) :
          QDialog(parent)
          {
          setupUi(this);

          saleOptionsGroupBox->setVisible(false);
          
          readSettings();
          
          initialise();
          
          setupOptionsComboBoxes();
          setupComboBoxes();
          setupCompleter();
          
          initialiseMemosAndList();
          

          }

          void MakeSaleDialog::initialise()
          {
          Sale::List list = Sale::fetchByQuery("WHERE sale_date = '" + QDate::currentDate().toString("dd/MM/yyyy") + "'");

          saleNumberEdit->setText(QVariant(list.size() + 1).toString());
          

          }

          void MakeSaleDialog::setupOptionsComboBoxes()
          {
          QSettings settings;

          RepositoryModel *repositoryModel = new RepositoryModel;
          repositoryModel->select();
          
          repositoryComboBox->setModel(repositoryModel);
          repositoryComboBox->setModelColumn(Repository::NameColumn);
          
          int defaultRepositoryID = settings.value("saleoptions/default_repository_id", 0).toInt();
          Repository::Pointer repository = Repository::fetchByPrimaryKey(defaultRepositoryID);
          
          if(repository->isValid())
              repositoryComboBox->setCurrentIndex(repositoryComboBox->findText(repository->name()));
          
          SaleTypeModel *saleTypeModel = new SaleTypeModel;
          saleTypeModel->select();
          
          saleTypeComboBox->setModel(saleTypeModel);
          saleTypeComboBox->setModelColumn(SaleType::NameColumn);
          
          int defaultSaleTypeID = settings.value("saleoptions/default_sale_type_id", 0).toInt();
          SaleType::Pointer saleType = SaleType::fetchByPrimaryKey(defaultSaleTypeID);
          
          if(saleType->isValid())
              saleTypeComboBox->setCurrentIndex(saleTypeComboBox->findText(saleType->name()));
          
          PaymentModeModel *paymentModeModel = new PaymentModeModel;
          paymentModeModel->select();
          
          paymentModeComboBox->setModel(paymentModeModel);
          paymentModeComboBox->setModelColumn(PaymentMode::NameColumn);
          
          int defaultPaymentModeID = settings.value("saleoptions/default_payment_mode_id", 0).toInt();
          PaymentMode::Pointer paymentMode = PaymentMode::fetchByPrimaryKey(defaultPaymentModeID);
          
          if(paymentMode->isValid())
              paymentModeComboBox->setCurrentIndex(paymentModeComboBox->findText(paymentMode->name()));
          

          }

          void MakeSaleDialog::setupComboBoxes()
          {
          VendorModel *vendorModel = new VendorModel;
          vendorModel->select();

          vendorComboBox->setModel(vendorModel);
          vendorComboBox->setModelColumn(Vendor::NameColumn);
          
          CustomerModel *customerModel = new CustomerModel;
          customerModel->select();
          
          customerComboBox->setModel(customerModel);
          customerComboBox->setModelColumn(Customer::NameColumn);
          

          }

          void MakeSaleDialog::setupCompleter()
          {
          m_designationModel = new QStringListModel;
          m_designationModel->setStringList(m_designationList);

          QCompleter *designationCompleter = new QCompleter(this);
          designationCompleter->setModel(m_designationModel);
          designationCompleter->setCaseSensitivity(Qt::CaseInsensitive);
          
          designationEdit->setCompleter(designationCompleter);
          

          }

          void MakeSaleDialog::initialiseMemosAndList()
          {
          QString repositoryName = repositoryComboBox->currentText();

          Repository::Pointer repository = Repository::fetchFirstByQuery("WHERE repository_name = '" + repositoryName + "'");
          
          if(repository->isValid())
          {
              RepositoryProduct::List list = RepositoryProduct::fetchByQuery("WHERE repository_id = " + QVariant(repository->id()).toString());
          
              foreach(RepositoryProduct::Pointer repoProduct, list)
              {
                  ProviderProduct::Pointer providerProduct = repoProduct->providerProduct();
                  Product::Pointer product = providerProduct->coreProduct();
          
                  QString designation = getProductDesignation(product);
                  designation += providerProduct->provider()->name() + " / " + repoProduct->entryDateInStock().toString("dd/MM/yyyy")
                          + " / " + repoProduct->expireDate().toString("dd/MM/yyyy");
          
                  quantityMemo[designation] = repoProduct->quantity();
                  priceMemo[designation] = providerProduct->price();
          
                  qDebug() << designation;
          
                  m_designationList << designation;
              }
          }
          

          }

          QString MakeSaleDialog::getProductDesignation(Product::Pointer p)
          {
          QString name = p->name();
          QString dosage = p->dosage()->name();
          QString form = p->form()->name();
          QString packaging = p->packaging()->name();

          QString designation = name;
          
          if(dosage != Product::UnAvailable)
              designation += " " + dosage;
          
          if(form != Product::UnAvailable)
              designation += " " + form;
          
          if(packaging != Product::UnAvailable)
              designation += " " + packaging;
          
          return designation;
          

          }

          void MakeSaleDialog::changeEvent(QEvent *e)
          {
          QDialog::changeEvent(e);
          switch (e->type()) {
          case QEvent::LanguageChange:
          retranslateUi(this);
          break;
          default:
          break;
          }
          }

          void MakeSaleDialog::closeEvent(QCloseEvent *e)
          {
          writeSettings();
          e->accept();
          }

          void MakeSaleDialog::readSettings()
          {
          QSettings settings;
          resize(settings.value("makesaledialog/size", QSize(954, 693)).toSize());
          }

          void MakeSaleDialog::writeSettings()
          {
          QSettings settings;
          settings.setValue("makesaledialog/size", size());
          }@

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

            And the offending .ui file?

            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