Russian Qt Forum
Апрель 29, 2024, 00:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [QT4]messagebox in slot -> segmentation fault  (Прочитано 5297 раз)
OmSoft
Гость
« : Май 17, 2006, 10:03 »

Здравствуйте все.
Проблема в следующем - есть обработчик события, конкретнее - слот,
повешенный на сигнал изменения ячейки treewidget, при некоторых условиях из
этого слота необходимо показать messagebox. Все бы хорошо - messagebox
отображается, но при его закрытии возникает SF. Пробовал и ручками
создавать собственное окошко, но все то же Грустный У меня случайно не в
генетическом коде ошибка? Что делаю не так?
Записан
Asaphus_Expansus
Гость
« Ответ #1 : Май 17, 2006, 11:55 »

Приложение однопоточное?
Записан
OmSoft
Гость
« Ответ #2 : Май 17, 2006, 11:56 »

Цитата: "Asaphus_Expansus"
Приложение однопоточное?

ага ...
Записан
Sergeich
Гость
« Ответ #3 : Май 17, 2006, 14:49 »

Попробуй законнектить слот с флагом Qt::QueuedConnection
Записан
OmSoft
Гость
« Ответ #4 : Май 17, 2006, 15:01 »

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

Попробовал - без изменений - SF  :cry:
Записан
Sergeich
Гость
« Ответ #5 : Май 17, 2006, 15:19 »

А под виндой тоже самое?
Записан
OmSoft
Гость
« Ответ #6 : Май 17, 2006, 15:20 »

Цитата: "Sergeich"
А под виндой тоже самое?

да вот не тестил я под виндой - интересует исключительно linux
Записан
Sergeich
Гость
« Ответ #7 : Май 17, 2006, 15:27 »

код в студию!!! желательно работающий кусок
Записан
OmSoft
Гость
« Ответ #8 : Май 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 отредактировал ...
Спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.069 секунд. Запросов: 20.