Russian Qt Forum

Qt => Общие вопросы => Тема начата: ASGAlex от Май 13, 2009, 23:51



Название: Сравнение строк приводит к сбою... [solved]
Отправлено: 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

Что-то я не пойму, в чем проблема, тем более что те циклы, в которых строки не равны, проходят нормально. Вылет наблюдается только тогда, когда строки равны.


Название: Re: Сравнение строк приводит к сбою...
Отправлено: Авварон от Май 14, 2009, 00:15
а кто сказал что в этом месте а не на 2 строчки позже?


Название: Re: Сравнение строк приводит к сбою...
Отправлено: ритт от Май 14, 2009, 01:00
QAction* sender=(QAction*)this->sender();
QPushButton* bt=(QPushButton*)sender->parent();

всегда надо такие штуки кастить по-человечески и не лениться проверять на 0


Название: Re: Сравнение строк приводит к сбою...
Отправлено: break от Май 14, 2009, 01:15
А парвильнее ли будет использовать qobject_cast<> - для стандртных Qt классов
и dynamic_cast<> для других C++


Название: Re: Сравнение строк приводит к сбою...
Отправлено: ритт от Май 14, 2009, 07:20
qobject_cast<> - для наследников QObject только!
dynamic_cast<> (и эксепшены) вообще стараюсь не использовать, дабы -rtti -exceptions


Название: Re: Сравнение строк приводит к сбою...
Отправлено: ASGAlex от Май 14, 2009, 20:48
Спасибо, решил проблему :-)