Qt - программа работает, когда запускается внутри qtcreator, но segfaults, если запущена из консоли - PullRequest
0 голосов
/ 07 апреля 2011

У меня странная проблема, когда я запускаю свою программу Qt с помощью Qtcreator или в папке, созданной Qtcreator (projectname-build-desktop), она работает, но если я хочу скомпилировать код с помощью qmake и make, я получаю Ошибка сегментации при запуске. GDB говорит мне, что:

Программа получила сигнал SIGSEGV, Ошибка сегментации. 0x0089bc37 в QTableView :: verticalHeader () const () из /usr/lib/libQtGui.so.4

проблема связана с функцией, заполняющей QtableWidget. Как это возможно, что это работает в одном случае, а не в другом? Вот функция:

void Xml::ajout_ligne_nouveaute (Ui::MainWindow * ui, QString type, QString nom,QString artiste)
{
          is_there_new = true;

          ui->table_new->setEditTriggers(QAbstractItemView::NoEditTriggers);
          ui->table_new->setSelectionBehavior(QAbstractItemView::SelectRows);

            // makes the cells more little
            QHeaderView *verticalHeader = ui->table_music->verticalHeader();
            verticalHeader->setDefaultSectionSize(verticalHeader->fontMetrics().height()+3);


            ui->table_new->setShowGrid(false);


            // auto dimention
            QHeaderView *headers = ui->table_new->horizontalHeader();
            headers->setResizeMode(QHeaderView::Stretch);


            // column number
            ui->table_new->setColumnCount(3);

             // column name
             QStringList header;
             header << "Type" << "Name" << "Artist" ;
             ui->table_new->setHorizontalHeaderLabels ( header );

             // remove left header
             ui->table_new->verticalHeader()->hide();


             // number of current columns
             ui->table_new->setRowCount(offset_courant_nouveaute);


             // one item by cell
             QTableWidgetItem * name  = new QTableWidgetItem(nom, 1000);

             QTableWidgetItem * artist  = new QTableWidgetItem(artiste, 1000);

             QTableWidgetItem * typ  = new QTableWidgetItem(type, 1000);

             ui->table_new->setItem(offset_courant_nouveaute-1, 0, name);
             ui->table_new->setItem(offset_courant_nouveaute-1, 1, artist);
             ui->table_new->setItem(offset_courant_nouveaute-1, 2, typ);


             if(offset_courant_nouveaute%2)
             {
                 QColor * couleur = new QColor( 227, 248, 255, 255);

                 typ->setBackgroundColor(*couleur);
                 artist->setBackgroundColor(*couleur);
                 name->setBackgroundColor(*couleur);
             }

   offset_courant_nouveaute ++;


}

1 Ответ

0 голосов
/ 07 апреля 2011

Проверьте LD_LIBRARY_PATH и, если необходимо, установите для него значение QTSDK lib.

...