Russian Qt Forum

Qt => Общие вопросы => Тема начата: OmSoft от Май 17, 2006, 10:03



Название: [QT4]messagebox in slot -> segmentation fault
Отправлено: OmSoft от Май 17, 2006, 10:03
Здравствуйте все.
Проблема в следующем - есть обработчик события, конкретнее - слот,
повешенный на сигнал изменения ячейки treewidget, при некоторых условиях из
этого слота необходимо показать messagebox. Все бы хорошо - messagebox
отображается, но при его закрытии возникает SF. Пробовал и ручками
создавать собственное окошко, но все то же :( У меня случайно не в
генетическом коде ошибка? Что делаю не так?


Название: [QT4]messagebox in slot -> segmentation fault
Отправлено: Asaphus_Expansus от Май 17, 2006, 11:55
Приложение однопоточное?


Название: [QT4]messagebox in slot -> segmentation fault
Отправлено: OmSoft от Май 17, 2006, 11:56
Цитата: "Asaphus_Expansus"
Приложение однопоточное?

ага ...


Название: [QT4]messagebox in slot -> segmentation fault
Отправлено: Sergeich от Май 17, 2006, 14:49
Попробуй законнектить слот с флагом Qt::QueuedConnection


Название: [QT4]messagebox in slot -> segmentation fault
Отправлено: OmSoft от Май 17, 2006, 15:01
Цитата: "Sergeich"
Попробуй законнектить слот с флагом Qt::QueuedConnection

Попробовал - без изменений - SF  :cry:


Название: [QT4]messagebox in slot -> segmentation fault
Отправлено: Sergeich от Май 17, 2006, 15:19
А под виндой тоже самое?


Название: [QT4]messagebox in slot -> segmentation fault
Отправлено: OmSoft от Май 17, 2006, 15:20
Цитата: "Sergeich"
А под виндой тоже самое?

да вот не тестил я под виндой - интересует исключительно linux


Название: [QT4]messagebox in slot -> segmentation fault
Отправлено: Sergeich от Май 17, 2006, 15:27
код в студию!!! желательно работающий кусок


Название: [QT4]messagebox in slot -> segmentation fault
Отправлено: OmSoft от Май 17, 2006, 15:47
Цитата: "Sergeich"
код в студию!!! желательно работающий кусок

Код:

child_w::child_w(int rights, QWidget * parent, Qt::WFlags flags):childBase_w(rights,parent,flags),Ui::ChildWindow()
{
connect(tblMain, SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(onItemChanged( QTableWidgetItem * )));
}
void child_w::onItemChanged( QTableWidgetItem * item )
{
int col = tblMain->column(item);
switch (col)
    {
case 0://код товара
       
if(!txt.isNull()&!txt.isEmpty())
          {
           
            db = QSqlDatabase::database("maindb");
            query = QSqlQuery::QSqlQuery(db);
            script = SelectGoodsByIdScript;
            script.replace(":id", txt);
            if (query.exec(script))
              {
                sz = query.size();
               
                if (sz > 0)
                  {
                    if (sz==1)
                      {//один товар
                        query.first();
                        disconnect(tblMain, SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(onItemChanged( QTableWidgetItem * )));
item->setText(QString::fromUtf8(query.value(0).toByteArray()));
tblMain->item(row,col+1)->setText(QString::fromUtf8(query.value(1).toByteArray()));
tblMain->item(row,col+2)->setText(QString::fromUtf8(query.value(2).toByteArray()));
tblMain->item(row,col+3)->setText(QString::number(query.value(3).toDouble()));

connect(tblMain, SIGNAL(itemChanged(QTableWidgetItem *) ), this, SLOT(onItemChanged( QTableWidgetItem * )), Qt::QueuedConnection);
 }
                    else
                      {//несколько товаров
                      }
                  }else
 {//пустая выборка - товар не найден
 QMessageBox::information(this, "WHL cashier","");
 }
              }
 query.clear();
          }

        break;
    default:
      break;
    }

это просто выдранный кусок - без QMessageBox все работает, с ним - нет ...

добавлено спустя 4 минуты:

 
Цитата: "Sergeich"
Попробуй законнектить слот с флагом Qt::QueuedConnection

все заработало! я ступил - не тот connect отредактировал ...
Спасибо!