Итак, уважаемые друзья, недавно мой друг dikar отпостил вопросы по поводу того зачем нужен *cast( тема Здесь). Так вот, пораскинув своими мозгами, мы поняли, что донесли до вас нашу спорную ситуацию не верно...И вот теперь исправляемся...
Значит дело было в следующем. На работе как и говорилось пишем визуальный интерфейс на Qt. Так как пишется он уже очень давно, то и коду выросло не мало. В один момент, по нажатию кнопки, у нас выскакивает наш написанный класс VIDACHA - потомок от QDialog. В этом классе живет другой наш класс. Это класс наследован от QWidget и называется Forms. Конструктор каждого из них принимает указатель на QWidget( прошу заметить, что сами классы между собой никак не связаны , но класс Forms при своем создании принимает указатель класса VIDACHA).Т.е:
class VIDACHA : public QDialog {
VIDACHA( QWidget * = 0 );
Forms *forms;
//Другие виджеты
};
class Forms : public QWidget {
Forms( QWidget * = 0 );
public:
void someFunction();
};
void Forms :: someFunction() {
//Какие-то манипуляции после которого надо закрыть весь QDialog
// Вот так мы закрыли QDialog
VIDACHA *papa = dynamic_cast< VIDACHA* >( parent() );
if( papa != NULL )
papa -> close();
}
Это предложил я, вот тут у нас и возник спор. Мой друг и коллега dikar это дело все удалил и сделал следующее:
void Forms :: someFunction() {
//Какие-то манипуляции после которого надо закрыть весь QDialog
// Вот так мы закрыли QDialog
reinterpret_cast< VIDACHA* >( parent() ) -> close();
}
Вопрос, как правильно поступить в этой ситуации?