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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сравнение строк приводит к сбою... [solved]  (Прочитано 3947 раз)
ASGAlex
Гость
« : Май 13, 2009, 23:51 »

Имеется такой код:
Код:
void TestEditWidget::menuItemSelected()
{
// TODO
QAction* sender=(QAction*)this->sender();
QMap<QString,QString>::iterator it=testsNames.begin();
for(;it!=testsNames.end();++it)
{
QString str1=sender->text();
QString str2=it.value();
!!!!!!! if(str1==str2)                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{
QPushButton* bt=(QPushButton*)sender->parent();
bt->setText(sender->text());
break;
}

}
}
В месте, выделенном восклицательными знаками, программа вылетает, сказав на прощанье вот это:
Код:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb6d55700 (LWP 5625)]
0xb7497564 in QString::operator== () from /usr/lib/libQtCore.so.4

Что-то я не пойму, в чем проблема, тем более что те циклы, в которых строки не равны, проходят нормально. Вылет наблюдается только тогда, когда строки равны.
« Последнее редактирование: Май 14, 2009, 20:48 от ASGAlex » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Май 14, 2009, 00:15 »

а кто сказал что в этом месте а не на 2 строчки позже?
Записан
ритт
Гость
« Ответ #2 : Май 14, 2009, 01:00 »

QAction* sender=(QAction*)this->sender();
QPushButton* bt=(QPushButton*)sender->parent();

всегда надо такие штуки кастить по-человечески и не лениться проверять на 0
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #3 : Май 14, 2009, 01:15 »

А парвильнее ли будет использовать qobject_cast<> - для стандртных Qt классов
и dynamic_cast<> для других C++
Записан
ритт
Гость
« Ответ #4 : Май 14, 2009, 07:20 »

qobject_cast<> - для наследников QObject только!
dynamic_cast<> (и эксепшены) вообще стараюсь не использовать, дабы -rtti -exceptions
Записан
ASGAlex
Гость
« Ответ #5 : Май 14, 2009, 20:48 »

Спасибо, решил проблему :-)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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