Название: Как сделать приведение типа QObject* -> MyClass* Отправлено: burevestnik от Январь 16, 2012, 13:07 Как сделать приведение типов QObject* -> MyClass* ?
public MyClass1 : public QWidget class MyClass2 : public QWidget есть некий указатель QWidget* ptr, он на самом деле ссылается на объект типа MyClass1 или MyClass2. я могу получить имя класса char* name1 = ptr->staticMetaObject()->className(); а вот как теперь привести ptr к типу name1 ? Название: Re: Как сделать приведение типа QObject* -> MyClass* Отправлено: Пантер от Январь 16, 2012, 13:09 Код: MyClass1 *my = qobject_cast <MyClass1*> (ptr); Название: Re: Как сделать приведение типа QObject* -> MyClass* Отправлено: interv от Январь 16, 2012, 13:09 или
Код: QObject *obj = new MyClass(a,b,c,d); Название: Re: Как сделать приведение типа QObject* -> MyClass* Отправлено: burevestnik от Январь 16, 2012, 13:10 а если там будет MyClass2 ?
Название: Re: Как сделать приведение типа QObject* -> MyClass* Отправлено: Пантер от Январь 16, 2012, 13:11 или Так делать плохо.Код: QObject *obj = new MyClass(a,b,c,d); а если там будет MyClass2 ? Вернет 0.Название: Re: Как сделать приведение типа QObject* -> MyClass* Отправлено: interv от Январь 16, 2012, 13:11 вроде пример Пантер'а вернет 0
MyClass1 *my = qobject_cast <MyClass1*> (ptr); if (my==0) return; Название: Re: Как сделать приведение типа QObject* -> MyClass* Отправлено: burevestnik от Январь 16, 2012, 13:13 Ребята!!!! мне нужно привести-то к типу name1 !!!!! какой тип мне className вернет, к тому и нужно приводить!!!!
Название: Re: Как сделать приведение типа QObject* -> MyClass* Отправлено: interv от Январь 16, 2012, 13:15 лол... по условию... а как иначе. ты же не знаеш какой класс у тя будет...
Код: char* name1 = ptr->staticMetaObject()->className(); Название: Re: Как сделать приведение типа QObject* -> MyClass* Отправлено: mutineer от Январь 16, 2012, 13:16 Ребята!!!! мне нужно привести-то к типу name1 !!!!! какой тип мне className вернет, к тому и нужно приводить!!!! Ну разве что через цепочку if'ов Блин, что ж у вас за задачи такие постоянно... Название: Re: Как сделать приведение типа QObject* -> MyClass* Отправлено: kambala от Январь 16, 2012, 13:18 ты лучше скажи какую цель этим преследуешь - может есть варианты получше.
Название: Re: Как сделать приведение типа QObject* -> MyClass* Отправлено: interv от Январь 16, 2012, 13:20 можно создать класс MyClass с абстрактным методом, переопределть его в MyClass1 и MyClass2
и Код: MyClass *my = qobject_cast <MyClass*> (ptr); Название: Re: Как сделать приведение типа QObject* -> MyClass* Отправлено: burevestnik от Январь 16, 2012, 13:25 у меня есть штук тридцать (пока, потом будет штук сто) разных пользовательских форм. Они наследуются от одной базвой формы и есть еще пара-тройка уровней наследников. На самом последнем уровне, добавляются всякие кнопки.
Вот мне нужно имея стек на указатели этих форм пройтись по нему, и все кнопки сделать не активными. Метод qFindChildren<QPushButton*>() работая с базовым типом естественно не находит кнопки, т.к. они добавляются ниже. значит надо делать понижающее приведение.... Название: Re: Как сделать приведение типа QObject* -> MyClass* Отправлено: mutineer от Январь 16, 2012, 13:30 Сделай у базовой формы метод setButtonsInactive(), переопредели его у форм-наследников. И вызывай у каждой формы этот метод
Название: Re: Как сделать приведение типа QObject* -> MyClass* Отправлено: interv от Январь 16, 2012, 13:30 дык есть решение...
Код
Сори! была ошибка Это метод делаеш у наследника QWidget, и наследуеш все формы от него. Все... Название: Re: Как сделать приведение типа QObject* -> MyClass* Отправлено: kambala от Январь 16, 2012, 13:47 Код отличная запись Автор, не забудь этот абстрактный метод объявить виртуальным. Название: Re: Как сделать приведение типа QObject* -> MyClass* Отправлено: interv от Январь 16, 2012, 13:58 Тут я не говорил что он абстрактный... ???
Название: Re: Как сделать приведение типа QObject* -> MyClass* Отправлено: Fregloin от Январь 17, 2012, 10:58 а почему не использовать dynamic_cast? хотя виртуальные функции здесь как раз кстати.
Название: Re: Как сделать приведение типа QObject* -> MyClass* Отправлено: Exproment от Январь 17, 2012, 16:24 я бы создал общего родителя "MyClass", определил бы в нем чисто виртуальный метод int Type(); и во всех наследниках его реализовал...
Затем Switch от типа и по case - с помощью static_cast все прекрасно преобразуешь... считаю это наиболее безопасным. Вообще динамическое приведение - не гуд. Если можно избавится - нужно избавится ) по многим причинам. Причем в самом Qt обычно так и реализовано (на примере QGaphicsObject) |